Skip to content

Commit e88e55f

Browse files
authored
Merge pull request #183 from rouault/do_not_truncate_error_messages
SHPCreateLL()/DBFCreate(): make error message contains full filename …
2 parents 1a33fb1 + f84a5c3 commit e88e55f

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

dbfopen.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
#include "shapefil_private.h"
1515

16+
#include <assert.h>
17+
#include <errno.h>
1618
#include <math.h>
1719
#include <stdbool.h>
1820
#include <stdio.h>
@@ -446,7 +448,7 @@ DBFHandle SHPAPI_CALL DBFOpenLL(const char *pszFilename, const char *pszAccess,
446448
const int nFields = (nHeadLen - XBASE_FILEHDR_SZ) / XBASE_FLDHDR_SZ;
447449
psDBF->nFields = nFields;
448450

449-
/* coverity[tainted_data] */
451+
assert(psDBF->nRecordLength < 65536);
450452
psDBF->pszCurrentRecord = STATIC_CAST(char *, malloc(psDBF->nRecordLength));
451453
if (!psDBF->pszCurrentRecord)
452454
{
@@ -490,6 +492,8 @@ DBFHandle SHPAPI_CALL DBFOpenLL(const char *pszFilename, const char *pszAccess,
490492
/* Read in Field Definitions */
491493
/* -------------------------------------------------------------------- */
492494

495+
// To please Coverity Scan
496+
assert(nHeadLen < 65536);
493497
unsigned char *pabyBufNew =
494498
STATIC_CAST(unsigned char *, realloc(pabyBuf, nHeadLen));
495499
if (!pabyBufNew)
@@ -684,6 +688,16 @@ DBFHandle SHPAPI_CALL DBFCreateLL(const char *pszFilename,
684688
SAFile fp = psHooks->FOpen(pszFullname, "wb+", psHooks->pvUserData);
685689
if (fp == SHPLIB_NULLPTR)
686690
{
691+
const size_t nMessageLen = strlen(pszFullname) + 256;
692+
char *pszMessage = STATIC_CAST(char *, malloc(nMessageLen));
693+
if (pszMessage)
694+
{
695+
snprintf(pszMessage, nMessageLen, "Failed to create file %s: %s",
696+
pszFullname, strerror(errno));
697+
psHooks->Error(pszMessage);
698+
free(pszMessage);
699+
}
700+
687701
free(pszFullname);
688702
return SHPLIB_NULLPTR;
689703
}

shpopen.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,11 +1028,15 @@ SHPHandle SHPAPI_CALL SHPCreateLL(const char *pszLayer, int nShapeType,
10281028
SAFile fpSHP = psHooks->FOpen(pszFullname, "w+b", psHooks->pvUserData);
10291029
if (fpSHP == SHPLIB_NULLPTR)
10301030
{
1031-
char szErrorMsg[200];
1032-
snprintf(szErrorMsg, sizeof(szErrorMsg), "Failed to create file %s: %s",
1033-
pszFullname, strerror(errno));
1034-
psHooks->Error(szErrorMsg);
1035-
1031+
const size_t nMessageLen = strlen(pszFullname) + 256;
1032+
char *pszMessage = STATIC_CAST(char *, malloc(nMessageLen));
1033+
if (pszMessage)
1034+
{
1035+
snprintf(pszMessage, nMessageLen, "Failed to create file %s: %s",
1036+
pszFullname, strerror(errno));
1037+
psHooks->Error(pszMessage);
1038+
free(pszMessage);
1039+
}
10361040
free(pszFullname);
10371041
free(psSHP);
10381042
return SHPLIB_NULLPTR;
@@ -1042,10 +1046,15 @@ SHPHandle SHPAPI_CALL SHPCreateLL(const char *pszLayer, int nShapeType,
10421046
SAFile fpSHX = psHooks->FOpen(pszFullname, "w+b", psHooks->pvUserData);
10431047
if (fpSHX == SHPLIB_NULLPTR)
10441048
{
1045-
char szErrorMsg[200];
1046-
snprintf(szErrorMsg, sizeof(szErrorMsg), "Failed to create file %s: %s",
1047-
pszFullname, strerror(errno));
1048-
psHooks->Error(szErrorMsg);
1049+
const size_t nMessageLen = strlen(pszFullname) + 256;
1050+
char *pszMessage = STATIC_CAST(char *, malloc(nMessageLen));
1051+
if (pszMessage)
1052+
{
1053+
snprintf(pszMessage, nMessageLen, "Failed to create file %s: %s",
1054+
pszFullname, strerror(errno));
1055+
psHooks->Error(pszMessage);
1056+
free(pszMessage);
1057+
}
10491058

10501059
free(pszFullname);
10511060
psHooks->FClose(fpSHP);

0 commit comments

Comments
 (0)