@@ -39,6 +39,16 @@ NetworkPacket::~NetworkPacket()
39
39
m_data.clear ();
40
40
}
41
41
42
+ void NetworkPacket::checkReadOffset (u32 from_offset)
43
+ {
44
+ if (from_offset >= m_datasize) {
45
+ std::stringstream ss;
46
+ ss << " Reading outside packet (offset: " <<
47
+ from_offset << " , packet size: " << getSize () << " )" ;
48
+ throw SerializationError (ss.str ());
49
+ }
50
+ }
51
+
42
52
void NetworkPacket::putRawPacket (u8 *data, u32 datasize, u16 peer_id)
43
53
{
44
54
// If a m_command is already set, we are rewriting on same packet
@@ -55,8 +65,7 @@ void NetworkPacket::putRawPacket(u8 *data, u32 datasize, u16 peer_id)
55
65
56
66
char * NetworkPacket::getString (u32 from_offset)
57
67
{
58
- if (from_offset >= m_datasize)
59
- throw SerializationError (" Malformed packet read" );
68
+ checkReadOffset (from_offset);
60
69
61
70
return (char *)&m_data[from_offset];
62
71
}
@@ -187,8 +196,7 @@ std::string NetworkPacket::readLongString()
187
196
188
197
NetworkPacket& NetworkPacket::operator >>(char & dst)
189
198
{
190
- if (m_read_offset >= m_datasize)
191
- throw SerializationError (" Malformed packet read" );
199
+ checkReadOffset (m_read_offset);
192
200
193
201
dst = readU8 (&m_data[m_read_offset]);
194
202
@@ -198,8 +206,7 @@ NetworkPacket& NetworkPacket::operator>>(char& dst)
198
206
199
207
char NetworkPacket::getChar (u32 offset)
200
208
{
201
- if (offset >= m_datasize)
202
- throw SerializationError (" Malformed packet read" );
209
+ checkReadOffset (offset);
203
210
204
211
return readU8 (&m_data[offset]);
205
212
}
@@ -276,8 +283,7 @@ NetworkPacket& NetworkPacket::operator<<(float src)
276
283
277
284
NetworkPacket& NetworkPacket::operator >>(bool & dst)
278
285
{
279
- if (m_read_offset >= m_datasize)
280
- throw SerializationError (" Malformed packet read" );
286
+ checkReadOffset (m_read_offset);
281
287
282
288
dst = readU8 (&m_data[m_read_offset]);
283
289
@@ -287,8 +293,7 @@ NetworkPacket& NetworkPacket::operator>>(bool& dst)
287
293
288
294
NetworkPacket& NetworkPacket::operator >>(u8& dst)
289
295
{
290
- if (m_read_offset >= m_datasize)
291
- throw SerializationError (" Malformed packet read" );
296
+ checkReadOffset (m_read_offset);
292
297
293
298
dst = readU8 (&m_data[m_read_offset]);
294
299
@@ -298,8 +303,7 @@ NetworkPacket& NetworkPacket::operator>>(u8& dst)
298
303
299
304
u8 NetworkPacket::getU8 (u32 offset)
300
305
{
301
- if (offset >= m_datasize)
302
- throw SerializationError (" Malformed packet read" );
306
+ checkReadOffset (offset);
303
307
304
308
return readU8 (&m_data[offset]);
305
309
}
@@ -310,16 +314,14 @@ u8* NetworkPacket::getU8Ptr(u32 from_offset)
310
314
return NULL ;
311
315
}
312
316
313
- if (from_offset >= m_datasize)
314
- throw SerializationError (" Malformed packet read" );
317
+ checkReadOffset (from_offset);
315
318
316
319
return (u8*)&m_data[from_offset];
317
320
}
318
321
319
322
NetworkPacket& NetworkPacket::operator >>(u16& dst)
320
323
{
321
- if (m_read_offset >= m_datasize)
322
- throw SerializationError (" Malformed packet read" );
324
+ checkReadOffset (m_read_offset);
323
325
324
326
dst = readU16 (&m_data[m_read_offset]);
325
327
@@ -329,16 +331,14 @@ NetworkPacket& NetworkPacket::operator>>(u16& dst)
329
331
330
332
u16 NetworkPacket::getU16 (u32 from_offset)
331
333
{
332
- if (from_offset >= m_datasize)
333
- throw SerializationError (" Malformed packet read" );
334
+ checkReadOffset (from_offset);
334
335
335
336
return readU16 (&m_data[from_offset]);
336
337
}
337
338
338
339
NetworkPacket& NetworkPacket::operator >>(u32& dst)
339
340
{
340
- if (m_read_offset >= m_datasize)
341
- throw SerializationError (" Malformed packet read" );
341
+ checkReadOffset (m_read_offset);
342
342
343
343
dst = readU32 (&m_data[m_read_offset]);
344
344
@@ -348,8 +348,7 @@ NetworkPacket& NetworkPacket::operator>>(u32& dst)
348
348
349
349
NetworkPacket& NetworkPacket::operator >>(u64& dst)
350
350
{
351
- if (m_read_offset >= m_datasize)
352
- throw SerializationError (" Malformed packet read" );
351
+ checkReadOffset (m_read_offset);
353
352
354
353
dst = readU64 (&m_data[m_read_offset]);
355
354
@@ -359,8 +358,7 @@ NetworkPacket& NetworkPacket::operator>>(u64& dst)
359
358
360
359
NetworkPacket& NetworkPacket::operator >>(float & dst)
361
360
{
362
- if (m_read_offset >= m_datasize)
363
- throw SerializationError (" Malformed packet read" );
361
+ checkReadOffset (m_read_offset);
364
362
365
363
dst = readF1000 (&m_data[m_read_offset]);
366
364
@@ -370,8 +368,7 @@ NetworkPacket& NetworkPacket::operator>>(float& dst)
370
368
371
369
NetworkPacket& NetworkPacket::operator >>(v2f& dst)
372
370
{
373
- if (m_read_offset >= m_datasize)
374
- throw SerializationError (" Malformed packet read" );
371
+ checkReadOffset (m_read_offset);
375
372
376
373
dst = readV2F1000 (&m_data[m_read_offset]);
377
374
@@ -381,8 +378,7 @@ NetworkPacket& NetworkPacket::operator>>(v2f& dst)
381
378
382
379
NetworkPacket& NetworkPacket::operator >>(v3f& dst)
383
380
{
384
- if (m_read_offset >= m_datasize)
385
- throw SerializationError (" Malformed packet read" );
381
+ checkReadOffset (m_read_offset);
386
382
387
383
dst = readV3F1000 (&m_data[m_read_offset]);
388
384
@@ -392,8 +388,7 @@ NetworkPacket& NetworkPacket::operator>>(v3f& dst)
392
388
393
389
NetworkPacket& NetworkPacket::operator >>(s16& dst)
394
390
{
395
- if (m_read_offset >= m_datasize)
396
- throw SerializationError (" Malformed packet read" );
391
+ checkReadOffset (m_read_offset);
397
392
398
393
dst = readS16 (&m_data[m_read_offset]);
399
394
@@ -409,8 +404,7 @@ NetworkPacket& NetworkPacket::operator<<(s16 src)
409
404
410
405
NetworkPacket& NetworkPacket::operator >>(s32& dst)
411
406
{
412
- if (m_read_offset >= m_datasize)
413
- throw SerializationError (" Malformed packet read" );
407
+ checkReadOffset (m_read_offset);
414
408
415
409
dst = readS32 (&m_data[m_read_offset]);
416
410
@@ -426,8 +420,7 @@ NetworkPacket& NetworkPacket::operator<<(s32 src)
426
420
427
421
NetworkPacket& NetworkPacket::operator >>(v3s16& dst)
428
422
{
429
- if (m_read_offset >= m_datasize)
430
- throw SerializationError (" Malformed packet read" );
423
+ checkReadOffset (m_read_offset);
431
424
432
425
dst = readV3S16 (&m_data[m_read_offset]);
433
426
@@ -445,8 +438,7 @@ NetworkPacket& NetworkPacket::operator>>(v2s32& dst)
445
438
446
439
NetworkPacket& NetworkPacket::operator >>(v3s32& dst)
447
440
{
448
- if (m_read_offset >= m_datasize)
449
- throw SerializationError (" Malformed packet read" );
441
+ checkReadOffset (m_read_offset);
450
442
451
443
dst = readV3S32 (&m_data[m_read_offset]);
452
444
@@ -494,8 +486,7 @@ NetworkPacket& NetworkPacket::operator<<(v3s32 src)
494
486
495
487
NetworkPacket& NetworkPacket::operator >>(video::SColor& dst)
496
488
{
497
- if (m_read_offset >= m_datasize)
498
- throw SerializationError (" Malformed packet read" );
489
+ checkReadOffset (m_read_offset);
499
490
500
491
dst = readARGB8 (&m_data[m_read_offset]);
501
492
0 commit comments