Mailinglist Archive: opensuse-bugs (14787 mails)

< Previous Next >
[Bug 222530] New: inconsistent sscanf %d parsing
  • From: bugzilla_noreply@xxxxxxxxxx
  • Date: Sun, 19 Nov 2006 05:45:44 -0700 (MST)
  • Message-id: <bug-222530-21960@xxxxxxxxxxxxxxxxxxxxxxxxx/>
https://bugzilla.novell.com/show_bug.cgi?id=222530

Summary: inconsistent sscanf %d parsing
Product: SUSE LINUX 10.0
Version: Final
Platform: x86-64
OS/Version: Linux
Status: NEW
Severity: Critical
Priority: P5 - None
Component: Development
AssignedTo: pth@xxxxxxxxxx
ReportedBy: matthias.andree@xxxxxx
QAContact: qa@xxxxxxx


sscanf parsing %d is inconsistent between 32 and 64 bit modes WRT overflow
handling:

ma@host:~> gcc -m64 -O -otry try.c
ma@host:~> ./try
n=1, i=-1, errno=34/Numerical result out of range
n=1, i=-1, errno=0/Success
n=1, i=2147483647, errno=0/Success
ma@host:~> gcc -m32 -O -otry try.c
ma@host:~> ./try
n=1, i=2147483647, errno=34/Numerical result out of range
n=1, i=2147483647, errno=34/Numerical result out of range
n=1, i=2147483647, errno=0/Success
ma@host:~> cat try.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int main(void) {
int n, i, e;

errno=0;
n = sscanf("18446744073709551615","%d", &i); e = errno;
printf("n=%d, i=%d, errno=%d/%s\n", n, i, e, strerror(e));

errno=0;
n = sscanf("4294967295","%d", &i); e = errno;
printf("n=%d, i=%d, errno=%d/%s\n", n, i, e, strerror(e));

errno=0;
n = sscanf("2147483647","%d", &i); e = errno;
printf("n=%d, i=%d, errno=%d/%s\n", n, i, e, strerror(e));
exit(EXIT_SUCCESS);
}


--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

< Previous Next >