Bug 121151
Summary: | sscanf doesn't return EOF when it should | ||||||
---|---|---|---|---|---|---|---|
Product: | [Fedora] Fedora | Reporter: | Alexei Podtelezhnikov <apodtele> | ||||
Component: | glibc | Assignee: | Jakub Jelinek <jakub> | ||||
Status: | CLOSED UPSTREAM | QA Contact: | |||||
Severity: | high | Docs Contact: | |||||
Priority: | medium | ||||||
Version: | rawhide | CC: | drepper | ||||
Target Milestone: | --- | ||||||
Target Release: | --- | ||||||
Hardware: | i386 | ||||||
OS: | Linux | ||||||
Whiteboard: | |||||||
Fixed In Version: | Doc Type: | Bug Fix | |||||
Doc Text: | Story Points: | --- | |||||
Clone Of: | Environment: | ||||||
Last Closed: | 2004-04-30 16:06:48 UTC | Type: | --- | ||||
Regression: | --- | Mount Type: | --- | ||||
Documentation: | --- | CRM: | |||||
Verified Versions: | Category: | --- | |||||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
Cloudforms Team: | --- | Target Upstream Version: | |||||
Embargoed: | |||||||
Attachments: |
|
Description
Alexei Podtelezhnikov
2004-04-18 06:27:29 UTC
Created attachment 99512 [details]
test.c testcase
Inlining the program mangled the lines. Attaching
#include <stdio.h> int main (void) { int ret1, ret2, ret3, ret4, x; ret1 = sscanf ("foo\n", "foo\nbar"); ret2 = sscanf ("foo\n", "foo bar"); ret3 = sscanf ("foo\n", "foo %d", &x); ret4 = sscanf ("foo\n", "foo\n%d", &x); printf ("EOF checks: %d %d %d %d\n", ret1, ret2, ret3, ret4); ret1 = sscanf ("foon", "foonbar"); ret2 = sscanf ("foon", "foo bar"); ret3 = sscanf ("foon", "foo %d", &x); ret4 = sscanf ("foon", "foon%d", &x); printf ("EOF checks: %d %d %d %d\n", ret1, ret2, ret3, ret4); ret1 = sscanf ("foo ", "foo bar"); ret2 = sscanf ("foo ", "fooxbar"); ret3 = sscanf ("foo ", "foox%d", &x); ret4 = sscanf ("foo ", "foo %d", &x); printf ("EOF checks: %d %d %d %d\n", ret1, ret2, ret3, ret4); ret1 = sscanf ("foo\t", "foo\tbar"); ret2 = sscanf ("foo\t", "foo bar"); ret3 = sscanf ("foo\t", "foo %d", &x); ret4 = sscanf ("foo\t", "foo\t%d", &x); printf ("EOF checks: %d %d %d %d\n", ret1, ret2, ret3, ret4); return 0; } Solaris doesn't seem to be consistent when to return 0 and when EOF either as it seems. SunOS 5.7, IRIX64 6.5.20m, and WinXP SP1 all correctly give: EOF checks: -1 -1 -1 -1 EOF checks: -1 0 0 -1 EOF checks: -1 0 0 -1 EOF checks: -1 -1 -1 -1 glibc 2.3.2: EOF checks: 0 0 -1 -1 EOF checks: -1 0 0 -1 EOF checks: 0 0 0 -1 EOF checks: 0 0 -1 -1 old cygwin 1.3.2 is even worse: EOF checks: 0 0 0 0 EOF checks: -1 0 0 -1 EOF checks: 0 0 0 0 EOF checks: 0 0 0 0 |