summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2013-06-05 17:25:22 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2013-06-05 17:25:22 +0000
commit4ffc419764a736cd489c21dd6895b2bf162cbf4e (patch)
tree281900679f19bd0f0fec31322d726426f00017ae
parent766a82295781e5923fda8329c981959b7b77558b (diff)
<rdar://problem/14065748> 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
-rw-r--r--cups/pwg-media.c5
-rw-r--r--cups/testpwg.c14
2 files changed, 17 insertions, 2 deletions
diff --git a/cups/pwg-media.c b/cups/pwg-media.c
index 3a4cb9709..49f69297f 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 b3d5cead5..58f6f73e4 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)
{