df: fix crash in mem exhaustion edge case
authorPádraig Brady <P@draigBrady.com>
Thu, 5 May 2011 14:20:13 +0000 (15:20 +0100)
committerPádraig Brady <P@draigBrady.com>
Thu, 5 May 2011 15:32:14 +0000 (16:32 +0100)
* src/df.c (print_table): Don't try to output NULL
if ambsalign() can't allocate memory.  Instead just
output the unaligned text.

src/df.c

index 14f0790..a049980 100644 (file)
--- a/src/df.c
+++ b/src/df.c
@@ -215,7 +215,7 @@ print_table (void)
         {
           size_t width = widths[field];
           char *cell = table[row][field];
-          if (!cell)
+          if (!cell) /* Missing type column, or mount point etc. */
             continue;
 
           /* Note the DEV_FIELD used to be displayed on it's own line
@@ -227,9 +227,9 @@ print_table (void)
             fputs (cell, stdout);
           else
             {
-              cell = ambsalign (table[row][field], &width,
-                                alignments[field], MBA_UNIBYTE_FALLBACK);
-              fputs (cell, stdout);
+              cell = ambsalign (cell, &width, alignments[field], 0);
+              /* When ambsalign fails, output unaligned data.  */
+              fputs (cell ? cell : table[row][field], stdout);
               free (cell);
             }
           IF_LINT (free (table[row][field]));