Resolve various compiler warnings and errors (#279)

* Resolved warnings in `src/daemon.c`

I.E.:
```
src/daemon.c:835:16: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
   char *name = iniparser_getsecname(ini, section);
                ^~~~~~~~~~~~~~~~~~~~
src/daemon.c:860:20: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
    char *ini_uri = iniparser_getstring(ini, buffer, (char *)"");
                    ^~~~~~~~~~~~~~~~~~~
```

* Resolved warning in `src/mod_tile.c`

I.E.:
```
./src/mod_tile.c:327:53: warning: format '%d' expects argument of type 'int', but argument 9 has type 'long unsigned int' [-Wformat=]
      ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, "request_tile: Failed to read response from rendering socket. Got %d bytes but expected %d. Errno %d (%s)",
                                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             ret, sizeof(struct protocol_v2), errno, strerror(errno));
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |
                  long unsigned int
```

* Resolved `cppcheck`-detected error

I.E.:
```
src/store_rados.c:355:3: error: Memory leak: store [memleak]
  return NULL;
  ^
```

* Fix `Does not check for buffer overflows (CWE-120)` in `src/daemon.c`

* Fix `Does not check for buffer overflows (CWE-120)` in `src/cache_expire.c`

* Resolved `cppcheck`-detected error

I.E.:
```
src/parameterize_style.cpp:43:3: error: Memory leak: data [memleak]
  return;        //No parameterization given
  ^

* url is `char *`, unlike buffer, size is not known
This commit is contained in:
Hummeltech
2022-05-29 11:29:21 -07:00
committed by GitHub
parent 42e4f0d283
commit 296f888752
6 changed files with 40 additions and 37 deletions

View File

@ -34,16 +34,16 @@ int daemon(int nochdir, int noclose);
#define MAX_SLAVES 5 #define MAX_SLAVES 5
typedef struct { typedef struct {
char *socketname; const char *iphostname;
char *iphostname; const char *mapnik_font_dir;
const char *mapnik_plugins_dir;
const char *pid_filename;
const char *socketname;
const char *stats_filename;
const char *tile_dir;
int ipport; int ipport;
int num_threads;
char *tile_dir;
char *mapnik_plugins_dir;
char *mapnik_font_dir;
int mapnik_font_dir_recurse; int mapnik_font_dir_recurse;
char * stats_filename; int num_threads;
const char * pid_filename;
} renderd_config; } renderd_config;
typedef struct { typedef struct {

View File

@ -115,7 +115,7 @@ void cache_expire(int sock, char * host, char * uri, int x, int y, int z)
} }
char * url = (char *)malloc(1024); char * url = (char *)malloc(1024);
sprintf(url, "http://%s%s%i/%i/%i.png", host, uri, z, x, y); snprintf(url, 1024, "http://%s%s%i/%i/%i.png", host, uri, z, x, y);
cache_expire_url(sock, url); cache_expire_url(sock, url);
free(url); free(url);
} }

View File

@ -831,7 +831,7 @@ int main(int argc, char **argv)
char buffer[PATH_MAX]; char buffer[PATH_MAX];
for (int section = 0; section < iniparser_getnsec(ini); section++) { for (int section = 0; section < iniparser_getnsec(ini); section++) {
char *name = iniparser_getsecname(ini, section); const char *name = iniparser_getsecname(ini, section);
g_logger(G_LOG_LEVEL_INFO, "Parsing section %s", name); g_logger(G_LOG_LEVEL_INFO, "Parsing section %s", name);
if (strncmp(name, "renderd", 7) && strcmp(name, "mapnik")) { if (strncmp(name, "renderd", 7) && strcmp(name, "mapnik")) {
@ -855,8 +855,8 @@ int main(int argc, char **argv)
strcpy(maps[iconf].xmlname, name); strcpy(maps[iconf].xmlname, name);
sprintf(buffer, "%s:uri", name); snprintf(buffer, sizeof(buffer), "%s:uri", name);
char *ini_uri = iniparser_getstring(ini, buffer, (char *)""); const char *ini_uri = iniparser_getstring(ini, buffer, (char *)"");
if (strlen(ini_uri) >= (PATH_MAX - 1)) { if (strlen(ini_uri) >= (PATH_MAX - 1)) {
g_logger(G_LOG_LEVEL_CRITICAL, "URI too long: %s", ini_uri); g_logger(G_LOG_LEVEL_CRITICAL, "URI too long: %s", ini_uri);
@ -865,8 +865,8 @@ int main(int argc, char **argv)
strcpy(maps[iconf].xmluri, ini_uri); strcpy(maps[iconf].xmluri, ini_uri);
sprintf(buffer, "%s:xml", name); snprintf(buffer, sizeof(buffer), "%s:xml", name);
char *ini_xmlpath = iniparser_getstring(ini, buffer, (char *)""); const char *ini_xmlpath = iniparser_getstring(ini, buffer, (char *)"");
if (strlen(ini_xmlpath) >= (PATH_MAX - 1)) { if (strlen(ini_xmlpath) >= (PATH_MAX - 1)) {
g_logger(G_LOG_LEVEL_CRITICAL, "XML path too long: %s", ini_xmlpath); g_logger(G_LOG_LEVEL_CRITICAL, "XML path too long: %s", ini_xmlpath);
@ -875,8 +875,8 @@ int main(int argc, char **argv)
strcpy(maps[iconf].xmlfile, ini_xmlpath); strcpy(maps[iconf].xmlfile, ini_xmlpath);
sprintf(buffer, "%s:host", name); snprintf(buffer, sizeof(buffer), "%s:host", name);
char *ini_hostname = iniparser_getstring(ini, buffer, (char *) ""); const char *ini_hostname = iniparser_getstring(ini, buffer, (char *) "");
if (strlen(ini_hostname) >= (PATH_MAX - 1)) { if (strlen(ini_hostname) >= (PATH_MAX - 1)) {
g_logger(G_LOG_LEVEL_CRITICAL, "Host name too long: %s", ini_hostname); g_logger(G_LOG_LEVEL_CRITICAL, "Host name too long: %s", ini_hostname);
@ -885,8 +885,8 @@ int main(int argc, char **argv)
strcpy(maps[iconf].host, ini_hostname); strcpy(maps[iconf].host, ini_hostname);
sprintf(buffer, "%s:htcphost", name); snprintf(buffer, sizeof(buffer), "%s:htcphost", name);
char *ini_htcpip = iniparser_getstring(ini, buffer, (char *) ""); const char *ini_htcpip = iniparser_getstring(ini, buffer, (char *) "");
if (strlen(ini_htcpip) >= (PATH_MAX - 1)) { if (strlen(ini_htcpip) >= (PATH_MAX - 1)) {
g_logger(G_LOG_LEVEL_CRITICAL, "HTCP host name too long: %s", ini_htcpip); g_logger(G_LOG_LEVEL_CRITICAL, "HTCP host name too long: %s", ini_htcpip);
@ -895,8 +895,8 @@ int main(int argc, char **argv)
strcpy(maps[iconf].htcpip, ini_htcpip); strcpy(maps[iconf].htcpip, ini_htcpip);
sprintf(buffer, "%s:tilesize", name); snprintf(buffer, sizeof(buffer), "%s:tilesize", name);
char *ini_tilesize = iniparser_getstring(ini, buffer, (char *) "256"); const char *ini_tilesize = iniparser_getstring(ini, buffer, (char *) "256");
maps[iconf].tile_px_size = atoi(ini_tilesize); maps[iconf].tile_px_size = atoi(ini_tilesize);
if (maps[iconf].tile_px_size < 1) { if (maps[iconf].tile_px_size < 1) {
@ -904,8 +904,8 @@ int main(int argc, char **argv)
exit(7); exit(7);
} }
sprintf(buffer, "%s:scale", name); snprintf(buffer, sizeof(buffer), "%s:scale", name);
char *ini_scale = iniparser_getstring(ini, buffer, (char *) "1.0"); const char *ini_scale = iniparser_getstring(ini, buffer, (char *) "1.0");
maps[iconf].scale_factor = atof(ini_scale); maps[iconf].scale_factor = atof(ini_scale);
if (maps[iconf].scale_factor < 0.1 || maps[iconf].scale_factor > 8.0) { if (maps[iconf].scale_factor < 0.1 || maps[iconf].scale_factor > 8.0) {
@ -913,8 +913,8 @@ int main(int argc, char **argv)
exit(7); exit(7);
} }
sprintf(buffer, "%s:tiledir", name); snprintf(buffer, sizeof(buffer), "%s:tiledir", name);
char *ini_tiledir = iniparser_getstring(ini, buffer, (char *) config.tile_dir); const char *ini_tiledir = iniparser_getstring(ini, buffer, (char *) config.tile_dir);
if (strlen(ini_tiledir) >= (PATH_MAX - 1)) { if (strlen(ini_tiledir) >= (PATH_MAX - 1)) {
g_logger(G_LOG_LEVEL_CRITICAL, "Tiledir too long: %s", ini_tiledir); g_logger(G_LOG_LEVEL_CRITICAL, "Tiledir too long: %s", ini_tiledir);
@ -923,8 +923,8 @@ int main(int argc, char **argv)
strcpy(maps[iconf].tile_dir, ini_tiledir); strcpy(maps[iconf].tile_dir, ini_tiledir);
sprintf(buffer, "%s:maxzoom", name); snprintf(buffer, sizeof(buffer), "%s:maxzoom", name);
char *ini_maxzoom = iniparser_getstring(ini, buffer, "18"); const char *ini_maxzoom = iniparser_getstring(ini, buffer, "18");
maps[iconf].max_zoom = atoi(ini_maxzoom); maps[iconf].max_zoom = atoi(ini_maxzoom);
if (maps[iconf].max_zoom > MAX_ZOOM) { if (maps[iconf].max_zoom > MAX_ZOOM) {
@ -932,8 +932,8 @@ int main(int argc, char **argv)
exit(7); exit(7);
} }
sprintf(buffer, "%s:minzoom", name); snprintf(buffer, sizeof(buffer), "%s:minzoom", name);
char *ini_minzoom = iniparser_getstring(ini, buffer, "0"); const char *ini_minzoom = iniparser_getstring(ini, buffer, "0");
maps[iconf].min_zoom = atoi(ini_minzoom); maps[iconf].min_zoom = atoi(ini_minzoom);
if (maps[iconf].min_zoom < 0) { if (maps[iconf].min_zoom < 0) {
@ -946,8 +946,8 @@ int main(int argc, char **argv)
exit(7); exit(7);
} }
sprintf(buffer, "%s:parameterize_style", name); snprintf(buffer, sizeof(buffer), "%s:parameterize_style", name);
char *ini_parameterize = iniparser_getstring(ini, buffer, ""); const char *ini_parameterize = iniparser_getstring(ini, buffer, "");
if (strlen(ini_parameterize) >= (PATH_MAX - 1)) { if (strlen(ini_parameterize) >= (PATH_MAX - 1)) {
g_logger(G_LOG_LEVEL_CRITICAL, "Parameterize_style too long: %s", ini_parameterize); g_logger(G_LOG_LEVEL_CRITICAL, "Parameterize_style too long: %s", ini_parameterize);
@ -976,21 +976,21 @@ int main(int argc, char **argv)
exit(7); exit(7);
} }
sprintf(buffer, "%s:socketname", name); snprintf(buffer, sizeof(buffer), "%s:socketname", name);
config_slaves[render_sec].socketname = iniparser_getstring(ini, config_slaves[render_sec].socketname = iniparser_getstring(ini,
buffer, (char *) RENDER_SOCKET); buffer, (char *) RENDER_SOCKET);
sprintf(buffer, "%s:iphostname", name); snprintf(buffer, sizeof(buffer), "%s:iphostname", name);
config_slaves[render_sec].iphostname = iniparser_getstring(ini, config_slaves[render_sec].iphostname = iniparser_getstring(ini,
buffer, ""); buffer, "");
sprintf(buffer, "%s:ipport", name); snprintf(buffer, sizeof(buffer), "%s:ipport", name);
config_slaves[render_sec].ipport = iniparser_getint(ini, buffer, 0); config_slaves[render_sec].ipport = iniparser_getint(ini, buffer, 0);
sprintf(buffer, "%s:num_threads", name); snprintf(buffer, sizeof(buffer), "%s:num_threads", name);
config_slaves[render_sec].num_threads = iniparser_getint(ini, config_slaves[render_sec].num_threads = iniparser_getint(ini,
buffer, NUM_THREADS); buffer, NUM_THREADS);
sprintf(buffer, "%s:tile_dir", name); snprintf(buffer, sizeof(buffer), "%s:tile_dir", name);
config_slaves[render_sec].tile_dir = iniparser_getstring(ini, config_slaves[render_sec].tile_dir = iniparser_getstring(ini,
buffer, (char *) HASH_PATH); buffer, (char *) HASH_PATH);
sprintf(buffer, "%s:stats_file", name); snprintf(buffer, sizeof(buffer), "%s:stats_file", name);
config_slaves[render_sec].stats_filename = iniparser_getstring(ini, config_slaves[render_sec].stats_filename = iniparser_getstring(ini,
buffer, NULL); buffer, NULL);
snprintf(buffer, sizeof(buffer), "%s:pid_file", name); snprintf(buffer, sizeof(buffer), "%s:pid_file", name);

View File

@ -325,7 +325,7 @@ static int request_tile(request_rec *r, struct protocol *cmd, int renderImmediat
if (ret != sizeof(struct protocol_v2)) { if (ret != sizeof(struct protocol_v2)) {
ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, "request_tile: Failed to read response from rendering socket. Got %d bytes but expected %d. Errno %d (%s)", ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, "request_tile: Failed to read response from rendering socket. Got %d bytes but expected %d. Errno %d (%s)",
ret, sizeof(struct protocol_v2), errno, strerror(errno)); ret, (int) sizeof(struct protocol_v2), errno, strerror(errno));
break; break;
} }

View File

@ -40,6 +40,7 @@ static void parameterize_map_language(mapnik::Map &m, char * parameter)
tok = strtok(data, ","); tok = strtok(data, ",");
if (!tok) { if (!tok) {
free(data);
return; //No parameterization given return; //No parameterization given
} }

View File

@ -352,6 +352,8 @@ struct storage_backend * init_storage_rados(const char * connection_string)
int i; int i;
if (ctx == NULL) { if (ctx == NULL) {
free(ctx);
free(store);
return NULL; return NULL;
} }