@@ -140,7 +140,9 @@ size_t kveStorageFindItemByPrefix(kveMemory_t *kve, size_t address,
140140 uint8_t searchedKeyLength = strlen (prefix );
141141
142142 while (currentAddress < (kve -> memorySize - 3 )) {
143- kve -> read (currentAddress , searchBuffer , 3 );
143+ if (kve -> read (currentAddress , searchBuffer , 3 ) == 0 ) {
144+ return KVE_STORAGE_INVALID_ADDRESS ;
145+ }
144146 length = searchBuffer [0 ] + (searchBuffer [1 ]<<8 );
145147 keyLength = searchBuffer [2 ];
146148
@@ -150,13 +152,15 @@ size_t kveStorageFindItemByPrefix(kveMemory_t *kve, size_t address,
150152 }
151153
152154 if (keyLength >= searchedKeyLength ) {
153- kve -> read (currentAddress + 3 , & searchBuffer , keyLength );
154- if (!memcmp (prefix , searchBuffer , searchedKeyLength )) {
155- memcpy (keyBuffer , searchBuffer , keyLength );
156- keyBuffer [keyLength ] = 0 ;
157- * itemAddress = currentAddress ;
158- return length ;
159- }
155+ if (kve -> read (currentAddress + 3 , & searchBuffer , keyLength ) == 0 ) {
156+ return KVE_STORAGE_INVALID_ADDRESS ;
157+ }
158+ if (!memcmp (prefix , searchBuffer , searchedKeyLength )) {
159+ memcpy (keyBuffer , searchBuffer , keyLength );
160+ keyBuffer [keyLength ] = 0 ;
161+ * itemAddress = currentAddress ;
162+ return length ;
163+ }
160164 }
161165
162166 currentAddress += length ;
@@ -171,7 +175,9 @@ size_t kveStorageFindEnd(kveMemory_t *kve, size_t address) {
171175 kveItemHeader_t header ;
172176
173177 while (currentAddress < (kve -> memorySize - 2 )) {
174- kve -> read (currentAddress , & header , sizeof (header ));
178+ if (kve -> read (currentAddress , & header , sizeof (header )) == 0 ) {
179+ return KVE_STORAGE_INVALID_ADDRESS ;
180+ }
175181 if (header .full_length == KVE_END_TAG ) {
176182 return currentAddress ;
177183 }
@@ -192,7 +198,9 @@ size_t kveStorageFindHole(kveMemory_t *kve, size_t address) {
192198 kveItemHeader_t header ;
193199
194200 while (currentAddress < (kve -> memorySize - 2 )) {
195- kve -> read (currentAddress , & header , sizeof (header ));
201+ if (kve -> read (currentAddress , & header , sizeof (header )) == 0 ) {
202+ return KVE_STORAGE_INVALID_ADDRESS ;
203+ }
196204 if (header .key_length == 0 ) {
197205 return currentAddress ;
198206 }
@@ -210,20 +218,28 @@ size_t kveStorageFindNextItem(kveMemory_t *kve, size_t address)
210218 kveItemHeader_t header ;
211219
212220 // Jump over the current item
213- kve -> read (currentAddress , & header , sizeof (header ));
221+ if (kve -> read (currentAddress , & header , sizeof (header )) == 0 ) {
222+ return KVE_STORAGE_INVALID_ADDRESS ;
223+ }
214224 if (header .full_length == KVE_END_TAG ) {
215225 return KVE_STORAGE_INVALID_ADDRESS ;
216226 }
227+ if (header .full_length == 0 ) {
228+ return KVE_STORAGE_INVALID_ADDRESS ;
229+ }
217230 currentAddress += header .full_length ;
218231
219232 while (currentAddress < (kve -> memorySize - 3 )) {
220- kve -> read (currentAddress , & header , sizeof (header ));
221-
233+ if (kve -> read (currentAddress , & header , sizeof (header )) == 0 ) {
234+ return KVE_STORAGE_INVALID_ADDRESS ;
235+ }
222236
223237 if (header .full_length == KVE_END_TAG ) {
224238 return KVE_STORAGE_INVALID_ADDRESS ;
225239 }
226-
240+ if (header .full_length == 0 ) {
241+ return KVE_STORAGE_INVALID_ADDRESS ;
242+ }
227243 if (header .key_length != 0 ) {
228244 return currentAddress ;
229245 }
0 commit comments