@@ -73,10 +73,10 @@ int process_webcfgdbblobparams( blob_data_t *e, msgpack_object_map *map );
7373//To initialize the DB when DB file is present
7474WEBCFG_STATUS initDB (char * db_file_path )
7575{
76- FILE * fp ;
77- size_t sz ;
78- char * data ;
79- size_t len ;
76+ FILE * fp = NULL ;
77+ size_t sz = 0 ;
78+ char * data = NULL ;
79+ size_t len = 0 ;
8080 int ch_count = 0 ;
8181 webconfig_db_data_t * dm = NULL ;
8282
@@ -92,13 +92,20 @@ WEBCFG_STATUS initDB(char * db_file_path )
9292 fseek (fp , 0 , SEEK_END );
9393 ch_count = ftell (fp );
9494 if (ch_count == (int )-1 )
95- {
96- WebcfgError ("fread failed.\n" );
97- fclose (fp );
98- return WEBCFG_FAILURE ;
99- }
95+ {
96+ WebcfgError ("fread failed.\n" );
97+ fclose (fp );
98+ return WEBCFG_FAILURE ;
99+ }
100100 fseek (fp , 0 , SEEK_SET );
101101 data = (char * ) malloc (sizeof (char ) * (ch_count + 1 ));
102+ if (NULL == data )
103+ {
104+ WebcfgError ("Memory allocation for data failed.\n" );
105+ fclose (fp );
106+ return WEBCFG_FAILURE ;
107+ }
108+ memset (data ,0 ,(ch_count + 1 ));
102109 sz = fread (data , 1 , ch_count ,fp );
103110 if (sz == (size_t )-1 )
104111 {
@@ -111,7 +118,15 @@ WEBCFG_STATUS initDB(char * db_file_path )
111118 fclose (fp );
112119
113120 dm = decodeData ((void * )data , len );
114- webcfgdb_destroy (dm );
121+ if (NULL == dm )
122+ {
123+ WebcfgError ("Msgpack decode failed\n" );
124+ return WEBCFG_FAILURE ;
125+ }
126+ else
127+ {
128+ webcfgdb_destroy (dm );
129+ }
115130 WEBCFG_FREE (data );
116131 generateBlob ();
117132 return WEBCFG_SUCCESS ;
@@ -126,9 +141,9 @@ WEBCFG_STATUS addNewDocEntry(size_t count)
126141
127142 WebcfgDebug ("size of subdoc %ld\n" , (size_t )count );
128143 webcfgdbPackSize = webcfgdb_pack (webcfgdb_data , & data , count );
129- WebcfgDebug ("size of webcfgdbPackSize %ld\n" , webcfgdbPackSize );
144+ WebcfgInfo ("size of webcfgdbPackSize %ld\n" , webcfgdbPackSize );
130145 WebcfgInfo ("writeToDBFile %s\n" , WEBCFG_DB_FILE );
131- writeToDBFile (WEBCFG_DB_FILE ,(char * )data );
146+ writeToDBFile (WEBCFG_DB_FILE ,(char * )data , webcfgdbPackSize );
132147 if (data )
133148 {
134149 WEBCFG_FREE (data );
@@ -154,12 +169,21 @@ WEBCFG_STATUS generateBlob()
154169 {
155170 webcfgdbBlobPackSize = webcfgdb_blob_pack (webcfgdb_data , g_head , & data );
156171 webcfgdb_blob = (blob_t * )malloc (sizeof (blob_t ));
157- webcfgdb_blob -> data = (char * )data ;
158- webcfgdb_blob -> len = webcfgdbBlobPackSize ;
172+ if (webcfgdb_blob != NULL )
173+ {
174+ memset ( webcfgdb_blob , 0 , sizeof ( blob_t ) );
159175
160- WebcfgDebug ("The webcfgdbBlobPackSize is : %ld\n" ,webcfgdb_blob -> len );
161- //WebcfgDebug("The value of blob is %s\n",webcfgdb_blob->data);
162- return WEBCFG_SUCCESS ;
176+ webcfgdb_blob -> data = (char * )data ;
177+ webcfgdb_blob -> len = webcfgdbBlobPackSize ;
178+
179+ WebcfgDebug ("The webcfgdbBlobPackSize is : %ld\n" ,webcfgdb_blob -> len );
180+ return WEBCFG_SUCCESS ;
181+ }
182+ else
183+ {
184+ WebcfgError ("Failed in memory allocation for webcfgdb_blob\n" );
185+ return WEBCFG_FAILURE ;
186+ }
163187 }
164188 else
165189 {
@@ -168,7 +192,7 @@ WEBCFG_STATUS generateBlob()
168192 }
169193}
170194
171- int writeToDBFile (char * db_file_path , char * data )
195+ int writeToDBFile (char * db_file_path , char * data , size_t size )
172196{
173197 FILE * fp ;
174198 fp = fopen (db_file_path , "w+" );
@@ -179,7 +203,7 @@ int writeToDBFile(char *db_file_path, char *data)
179203 }
180204 if (data != NULL )
181205 {
182- fwrite (data , strlen ( data ) , 1 , fp );
206+ fwrite (data , size , 1 , fp );
183207 fclose (fp );
184208 return 1 ;
185209 }
@@ -401,13 +425,21 @@ void checkDBList(char *docname, uint32_t version)
401425 {
402426 webconfig_db_data_t * webcfgdb = NULL ;
403427 webcfgdb = (webconfig_db_data_t * ) malloc (sizeof (webconfig_db_data_t ));
428+ if (webcfgdb != NULL )
429+ {
430+ memset ( webcfgdb , 0 , sizeof ( webconfig_db_data_t ) );
404431
405- webcfgdb -> name = strdup (docname );
406- webcfgdb -> version = version ;
407- webcfgdb -> next = NULL ;
432+ webcfgdb -> name = strdup (docname );
433+ webcfgdb -> version = version ;
434+ webcfgdb -> next = NULL ;
408435
409- addToDBList (webcfgdb );
410- WebcfgInfo ("webcfgdb->name added to DB %s webcfgdb->version %lu\n" ,webcfgdb -> name , (long )webcfgdb -> version );
436+ addToDBList (webcfgdb );
437+ WebcfgInfo ("webcfgdb->name added to DB %s webcfgdb->version %lu\n" ,webcfgdb -> name , (long )webcfgdb -> version );
438+ }
439+ else
440+ {
441+ WebcfgError ("Failed in memory allocation for webcfgdb\n" );
442+ }
411443 }
412444}
413445
@@ -603,6 +635,12 @@ int process_webcfgdbparams( webconfig_db_data_t *e, msgpack_object_map *map )
603635
604636int process_webcfgdb ( webconfig_db_data_t * wd , msgpack_object * obj )
605637{
638+ if (NULL == obj )
639+ {
640+ WebcfgError ("Msgpack decode obj NULL\n" );
641+ return -1 ;
642+ }
643+
606644 msgpack_object_array * array = & obj -> via .array ;
607645 if ( 0 < array -> size )
608646 {
@@ -614,7 +652,15 @@ int process_webcfgdb( webconfig_db_data_t *wd, msgpack_object *obj )
614652 WebcfgDebug ("entries_count %zu\n" ,entries_count );
615653 for ( i = 0 ; i < entries_count ; i ++ )
616654 {
617- wd = (webconfig_db_data_t * ) malloc (sizeof (webconfig_db_data_t ));
655+ wd = (webconfig_db_data_t * ) malloc (sizeof (webconfig_db_data_t ));
656+ if (NULL == wd )
657+ {
658+ WebcfgError ("Failed in memory allocation for wd\n" );
659+ return -1 ;
660+ }
661+
662+ memset ( wd , 0 , sizeof ( webconfig_db_data_t ) );
663+
618664 if ( MSGPACK_OBJECT_MAP != array -> ptr [i ].type )
619665 {
620666 errno = WD_INVALID_WD_OBJECT ;
@@ -677,17 +723,22 @@ char * get_DB_BLOB_base64()
677723 encodeSize = b64_get_encoded_buffer_size ( db_blob -> len );
678724 WebcfgDebug ("encodeSize is %zu\n" , encodeSize );
679725 b64buffer = malloc (encodeSize + 1 );
680- b64_encode ((uint8_t * )db_blob -> data , db_blob -> len , (uint8_t * )b64buffer );
681- b64buffer [encodeSize ] = '\0' ;
726+ if (b64buffer != NULL )
727+ {
728+ memset ( b64buffer , 0 , sizeof ( encodeSize )+ 1 );
682729
683- //Start of b64 decoding for debug purpose
684- WebcfgDebug ("----Start of b64 decoding----\n" );
685- decodeMsgSize = b64_get_decoded_buffer_size (strlen (b64buffer ));
686- WebcfgDebug ("expected b64 decoded msg size : %ld bytes\n" ,decodeMsgSize );
730+ b64_encode ((uint8_t * )db_blob -> data , db_blob -> len , (uint8_t * )b64buffer );
731+ b64buffer [encodeSize ] = '\0' ;
687732
688- decodeMsg = (char * ) malloc (sizeof (char ) * decodeMsgSize );
689- if (decodeMsg )
690- {
733+ //Start of b64 decoding for debug purpose
734+ WebcfgDebug ("----Start of b64 decoding----\n" );
735+ decodeMsgSize = b64_get_decoded_buffer_size (strlen (b64buffer ));
736+ WebcfgDebug ("expected b64 decoded msg size : %ld bytes\n" ,decodeMsgSize );
737+
738+ decodeMsg = (char * ) malloc (sizeof (char ) * decodeMsgSize );
739+ if (decodeMsg )
740+ {
741+ memset ( decodeMsg , 0 , sizeof (char ) * decodeMsgSize );
691742 size = b64_decode ( (const uint8_t * )b64buffer , strlen (b64buffer ), (uint8_t * )decodeMsg );
692743
693744 WebcfgInfo ("base64 decoded data containing %zu bytes\n" ,size );
@@ -705,9 +756,10 @@ char * get_DB_BLOB_base64()
705756 }
706757 webcfgdbblob_destroy (bd );
707758 WEBCFG_FREE (decodeMsg );
708- }
759+ }
709760
710- WebcfgDebug ("---------- End of Base64 decode -------------\n" );
761+ WebcfgDebug ("---------- End of Base64 decode -------------\n" );
762+ }
711763 }
712764 else
713765 {
@@ -828,8 +880,13 @@ char * base64blobencoder(char * blob_data, size_t blob_size )
828880 encodeSize = b64_get_encoded_buffer_size (blob_size );
829881 WebcfgDebug ("encodeSize is %zu\n" , encodeSize );
830882 b64buffer = malloc (encodeSize + 1 );
831- b64_encode ((uint8_t * )blob_data , blob_size , (uint8_t * )b64buffer );
832- b64buffer [encodeSize ] = '\0' ;
883+ if (b64buffer != NULL )
884+ {
885+ memset ( b64buffer , 0 , sizeof ( encodeSize )+ 1 );
886+
887+ b64_encode ((uint8_t * )blob_data , blob_size , (uint8_t * )b64buffer );
888+ b64buffer [encodeSize ] = '\0' ;
889+ }
833890 return b64buffer ;
834891}
835892
0 commit comments