author | Craig Mohrman <craig.mohrman@oracle.com> |
Mon, 22 Jul 2013 12:36:47 -0700 | |
changeset 1402 | f225f89a0538 |
parent 1326 | 6edae69990a7 |
permissions | -rw-r--r-- |
1326
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
1 |
Fix for CR #16833210 - god does not handle large values of -w well |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
2 |
|
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
3 |
GNU od -wN with N larger than 64K on a system with 32-bit size_t would |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
4 |
print approximately 2*N bytes of extraneous padding. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
5 |
[Bug introduced in coreutils-7.0] |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
6 |
|
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
7 |
From: Jim Meyering <address@hidden> |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
8 |
Date: Sat, 1 Jun 2013 19:20:06 -0700 |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
9 |
Subject: [PATCH] od: -wN, N>64K, avoid misbehavior on systems with 32-bit |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
10 |
size_t |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
11 |
|
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
12 |
* src/od.c (PRINT_FIELDS): Declare "i" to be of type uintmax_t, so that |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
13 |
the numerator in the expression for "next_pad" does not overflow. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
14 |
(print_named_ascii): Likewise. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
15 |
(print_ascii): Likewise. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
16 |
Bug introduced via commit v6.12-42-g20c0b87. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
17 |
* tests/misc/od.pl: Exercise each of the three affected code paths. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
18 |
* NEWS (Bug fixes): Mention it. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
19 |
Reported by Rich Burridge. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
20 |
--- |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
21 |
NEWS | 4 ++++ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
22 |
THANKS.in | 1 + |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
23 |
src/od.c | 6 +++--- |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
24 |
tests/misc/od.pl | 7 +++++++ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
25 |
4 files changed, 15 insertions(+), 3 deletions(-) |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
26 |
|
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
27 |
Also see the email thread at: |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
28 |
http://lists.gnu.org/archive/html/bug-coreutils/2013-06/msg00009.html |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
29 |
|
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
30 |
--- coreutils-8.16/src/od.c.orig 2013-06-03 06:32:09.966956225 -0700 |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
31 |
+++ coreutils-8.16/src/od.c 2013-06-03 07:15:29.690420676 -0700 |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
32 |
@@ -394,7 +394,7 @@ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
33 |
char const *FMT_STRING, int width, int pad) \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
34 |
{ \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
35 |
T const *p = block; \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
36 |
- size_t i; \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
37 |
+ uintmax_t i; \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
38 |
int pad_remaining = pad; \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
39 |
for (i = fields; blank < i; i--) \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
40 |
{ \ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
41 |
@@ -450,7 +450,7 @@ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
42 |
int width, int pad) |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
43 |
{ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
44 |
unsigned char const *p = block; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
45 |
- size_t i; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
46 |
+ uintmax_t i; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
47 |
int pad_remaining = pad; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
48 |
for (i = fields; blank < i; i--) |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
49 |
{ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
50 |
@@ -481,7 +481,7 @@ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
51 |
int pad) |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
52 |
{ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
53 |
unsigned char const *p = block; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
54 |
- size_t i; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
55 |
+ uintmax_t i; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
56 |
int pad_remaining = pad; |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
57 |
for (i = fields; blank < i; i--) |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
58 |
{ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
59 |
--- coreutils-8.16/tests/misc/od.orig 2013-06-03 06:34:10.913221535 -0700 |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
60 |
+++ coreutils-8.16/tests/misc/od 2013-06-03 06:34:46.766226767 -0700 |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
61 |
@@ -57,6 +57,14 @@ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
62 |
# even if the kernel reports that the file has stat.st_size = 0. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
63 |
['j-proc', "-An -c -j $proc_file_byte_count $proc_file", |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
64 |
{IN=>{f2=>'e'}}, {OUT=>" e\n"}], |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
65 |
+ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
66 |
+ # Ensure that a large width does not cause trouble. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
67 |
+ # From coreutils-7.0 through coreutils-8.21, these would print |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
68 |
+ # approximately 128KiB of padding. |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
69 |
+ ['wide-a', '-a -w65537 -An', {IN=>{g=>'x'}}, {OUT=>" x\n"}], |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
70 |
+ ['wide-c', '-c -w65537 -An', {IN=>{g=>'x'}}, {OUT=>" x\n"}], |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
71 |
+ ['wide-x', '-tx1 -w65537 -An', {IN=>{g=>'B'}}, {OUT=>" 42\n"}], |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
72 |
+ |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
73 |
); |
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
74 |
|
6edae69990a7
16833210 god does not handle large values of -w well
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
75 |
my $save_temps = $ENV{DEBUG}; |