From: msweet Date: Wed, 5 Jun 2013 17:25:22 +0000 (+0000) Subject: pwgMediaForPWG: roll_max_36.1025x3622.0472in becomes 91700... X-Git-Tag: release-1.7rc1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4ffc419764a736cd489c21dd6895b2bf162cbf4e;p=thirdparty%2Fcups.git pwgMediaForPWG: roll_max_36.1025x3622.0472in becomes 91700 x 180568 instead of 91700 x 9199999 Convert fractional portion separately to avoid integer overflow. git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@11011 a1ca3aef-8c08-0410-bb20-df032aa958be --- diff --git a/cups/pwg-media.c b/cups/pwg-media.c index 3a4cb97093..49f69297f1 100644 --- a/cups/pwg-media.c +++ b/cups/pwg-media.c @@ -1132,6 +1132,7 @@ pwg_scan_measurement( int denom) /* I - Denominator from units */ { int value = 0, /* Measurement value */ + fractional = 0, /* Fractional value */ divisor = 1, /* Fractional divisor */ digits = 10 * numer * denom; /* Maximum fractional value to read */ @@ -1153,7 +1154,7 @@ pwg_scan_measurement( while (divisor < digits && *buf >= '0' && *buf <= '9') { - value = value * 10 + (*buf++) - '0'; + fractional = fractional * 10 + (*buf++) - '0'; divisor *= 10; } @@ -1168,7 +1169,7 @@ pwg_scan_measurement( if (bufptr) *bufptr = (char *)buf; - return (value * numer / denom / divisor); + return (value * numer / denom + fractional * numer / denom / divisor); } diff --git a/cups/testpwg.c b/cups/testpwg.c index b3d5cead52..58f6f73e4a 100644 --- a/cups/testpwg.c +++ b/cups/testpwg.c @@ -170,6 +170,20 @@ main(int argc, /* I - Number of command-line args */ else puts("PASS"); + fputs("pwgMediaForPWG(\"roll_max_36.1025x3622.0472in\"): ", stdout); + if ((pwgmedia = pwgMediaForPWG("roll_max_36.1025x3622.0472in")) == NULL) + { + puts("FAIL (not found)"); + status ++; + } + else if (pwgmedia->width != 91700 || pwgmedia->length != 9199999) + { + printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length); + status ++; + } + else + printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length); + fputs("pwgMediaForLegacy(\"na-letter\"): ", stdout); if ((pwgmedia = pwgMediaForLegacy("na-letter")) == NULL) {