Fossil SCM
Use fossil_strnicmp() instead of memcmp() for date comparisons, to avoid NULL-pointer deferences if something is wrong with the database and a NULL date is returned from a query.
Commit
29b2eebaaa9095e270140b45becb130b2f9b6d7a
Parent
ff9e4e540046a5f…
1 file changed
+2
-2
+2
-2
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -320,11 +320,11 @@ | ||
| 320 | 320 | prevWasDivider = 1; |
| 321 | 321 | continue; |
| 322 | 322 | } |
| 323 | 323 | prevWasDivider = 0; |
| 324 | 324 | if( dateFormat<2 ){ |
| 325 | - if( memcmp(zDate, zPrevDate, 10) ){ | |
| 325 | + if( fossil_strnicmp(zDate, zPrevDate, 10) ){ | |
| 326 | 326 | sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate); |
| 327 | 327 | @ <tr><td> |
| 328 | 328 | @ <div class="divider timelineDate">%s(zPrevDate)</div> |
| 329 | 329 | @ </td><td></td><td></td></tr> |
| 330 | 330 | } |
| @@ -1597,11 +1597,11 @@ | ||
| 1597 | 1597 | fossil_print("--- entry limit (%d) reached ---\n", nAbsLimit); |
| 1598 | 1598 | break; /* entry count limit hit, stop. */ |
| 1599 | 1599 | } |
| 1600 | 1600 | } |
| 1601 | 1601 | sqlite3_snprintf(sizeof(zUuid), zUuid, "%.10s", zId); |
| 1602 | - if( memcmp(zDate, zPrevDate, 10) ){ | |
| 1602 | + if( fossil_strnicmp(zDate, zPrevDate, 10) ){ | |
| 1603 | 1603 | fossil_print("=== %.10s ===\n", zDate); |
| 1604 | 1604 | memcpy(zPrevDate, zDate, 10); |
| 1605 | 1605 | nLine++; /* record another line */ |
| 1606 | 1606 | } |
| 1607 | 1607 | if( zCom==0 ) zCom = ""; |
| 1608 | 1608 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -320,11 +320,11 @@ | |
| 320 | prevWasDivider = 1; |
| 321 | continue; |
| 322 | } |
| 323 | prevWasDivider = 0; |
| 324 | if( dateFormat<2 ){ |
| 325 | if( memcmp(zDate, zPrevDate, 10) ){ |
| 326 | sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate); |
| 327 | @ <tr><td> |
| 328 | @ <div class="divider timelineDate">%s(zPrevDate)</div> |
| 329 | @ </td><td></td><td></td></tr> |
| 330 | } |
| @@ -1597,11 +1597,11 @@ | |
| 1597 | fossil_print("--- entry limit (%d) reached ---\n", nAbsLimit); |
| 1598 | break; /* entry count limit hit, stop. */ |
| 1599 | } |
| 1600 | } |
| 1601 | sqlite3_snprintf(sizeof(zUuid), zUuid, "%.10s", zId); |
| 1602 | if( memcmp(zDate, zPrevDate, 10) ){ |
| 1603 | fossil_print("=== %.10s ===\n", zDate); |
| 1604 | memcpy(zPrevDate, zDate, 10); |
| 1605 | nLine++; /* record another line */ |
| 1606 | } |
| 1607 | if( zCom==0 ) zCom = ""; |
| 1608 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -320,11 +320,11 @@ | |
| 320 | prevWasDivider = 1; |
| 321 | continue; |
| 322 | } |
| 323 | prevWasDivider = 0; |
| 324 | if( dateFormat<2 ){ |
| 325 | if( fossil_strnicmp(zDate, zPrevDate, 10) ){ |
| 326 | sqlite3_snprintf(sizeof(zPrevDate), zPrevDate, "%.10s", zDate); |
| 327 | @ <tr><td> |
| 328 | @ <div class="divider timelineDate">%s(zPrevDate)</div> |
| 329 | @ </td><td></td><td></td></tr> |
| 330 | } |
| @@ -1597,11 +1597,11 @@ | |
| 1597 | fossil_print("--- entry limit (%d) reached ---\n", nAbsLimit); |
| 1598 | break; /* entry count limit hit, stop. */ |
| 1599 | } |
| 1600 | } |
| 1601 | sqlite3_snprintf(sizeof(zUuid), zUuid, "%.10s", zId); |
| 1602 | if( fossil_strnicmp(zDate, zPrevDate, 10) ){ |
| 1603 | fossil_print("=== %.10s ===\n", zDate); |
| 1604 | memcpy(zPrevDate, zDate, 10); |
| 1605 | nLine++; /* record another line */ |
| 1606 | } |
| 1607 | if( zCom==0 ) zCom = ""; |
| 1608 |