Skip to content
This repository
Browse code

libfreerdp-core: cleanup memory management of secondary orders

  • Loading branch information...
commit a1f23d0f97cf88b1ef2b73b7757a09b67e43c60d 1 parent 353376a
Marc-André Moreau awakecoding authored
4 channels/client/CMakeLists.txt
@@ -46,11 +46,11 @@ foreach(STATIC_ENTRY ${CHANNEL_STATIC_CLIENT_ENTRIES})
46 46 set(CLIENT_STATIC_ENTRY_IMPORTS "${CLIENT_STATIC_ENTRY_IMPORTS}\n${${STATIC_ENTRY}_IMPORTS}")
47 47 set(CLIENT_STATIC_ENTRY_TABLES "${CLIENT_STATIC_ENTRY_TABLES}\nconst STATIC_ENTRY CLIENT_${STATIC_ENTRY}_TABLE[] =\n{")
48 48 set(CLIENT_STATIC_ENTRY_TABLES "${CLIENT_STATIC_ENTRY_TABLES}\n${${STATIC_ENTRY}_TABLE}")
49   - set(CLIENT_STATIC_ENTRY_TABLES "${CLIENT_STATIC_ENTRY_TABLES}\n\t{ \"\", NULL }\n};")
  49 + set(CLIENT_STATIC_ENTRY_TABLES "${CLIENT_STATIC_ENTRY_TABLES}\n\t{ NULL, NULL }\n};")
50 50 set(CLIENT_STATIC_ENTRY_TABLES_LIST "${CLIENT_STATIC_ENTRY_TABLES_LIST}\n\t{ \"${STATIC_ENTRY}\", CLIENT_${STATIC_ENTRY}_TABLE },")
51 51 endforeach()
52 52
53   -set(CLIENT_STATIC_ENTRY_TABLES_LIST "${CLIENT_STATIC_ENTRY_TABLES_LIST}\n\t{ \"\", NULL }\n};")
  53 +set(CLIENT_STATIC_ENTRY_TABLES_LIST "${CLIENT_STATIC_ENTRY_TABLES_LIST}\n\t{ NULL, NULL }\n};")
54 54
55 55 set(CLIENT_STATIC_ADDIN_TABLE "const STATIC_ADDIN_TABLE CLIENT_STATIC_ADDIN_TABLE[] =\n{")
56 56 foreach(STATIC_MODULE ${CHANNEL_STATIC_CLIENT_MODULES})
2  channels/client/channels.c
@@ -358,7 +358,9 @@ void* freerdp_channels_load_static_addin_entry(LPCSTR pszName, LPSTR pszSubsyste
358 358 }
359 359 }
360 360 else
  361 + {
361 362 return (void*) CLIENT_STATIC_ADDIN_TABLE[i].entry;
  363 + }
362 364 }
363 365 }
364 366
6 include/freerdp/gdi/gdi.h
@@ -69,6 +69,12 @@
69 69 #define GDI_DPa 0x00A000C9 /* D = D & P */
70 70 #define GDI_PDxn 0x00A50065 /* D = D ^ ~P */
71 71
  72 +#define GDI_DSxn 0x00990066
  73 +#define GDI_PSDnox 0x002D060A
  74 +#define GDI_PDSona 0x00100C85
  75 +#define GDI_DSPDxox 0x00740646
  76 +#define GDI_DPSDonox 0x005B18A9
  77 +
72 78 #define GDI_DPon 0x000500A9
73 79 #define GDI_DPna 0x000A0329
74 80 #define GDI_Pn 0x000F0001
6 include/freerdp/secondary.h
@@ -147,7 +147,7 @@ struct _CACHE_GLYPH_ORDER
147 147 {
148 148 UINT32 cacheId;
149 149 UINT32 cGlyphs;
150   - GLYPH_DATA* glyphData[255];
  150 + GLYPH_DATA glyphData[255];
151 151 BYTE* unicodeCharacters;
152 152 };
153 153 typedef struct _CACHE_GLYPH_ORDER CACHE_GLYPH_ORDER;
@@ -169,7 +169,7 @@ struct _CACHE_GLYPH_V2_ORDER
169 169 UINT32 cacheId;
170 170 UINT32 flags;
171 171 UINT32 cGlyphs;
172   - GLYPH_DATA_V2* glyphData[255];
  172 + GLYPH_DATA_V2 glyphData[255];
173 173 BYTE* unicodeCharacters;
174 174 };
175 175 typedef struct _CACHE_GLYPH_V2_ORDER CACHE_GLYPH_V2_ORDER;
@@ -182,7 +182,7 @@ struct _CACHE_BRUSH_ORDER
182 182 UINT32 cy;
183 183 UINT32 style;
184 184 UINT32 length;
185   - BYTE* data;
  185 + BYTE data[256];
186 186 };
187 187 typedef struct _CACHE_BRUSH_ORDER CACHE_BRUSH_ORDER;
188 188
10 libfreerdp/cache/brush.c
@@ -75,8 +75,16 @@ void update_gdi_polygon_cb(rdpContext* context, POLYGON_CB_ORDER* polygon_cb)
75 75
76 76 void update_gdi_cache_brush(rdpContext* context, CACHE_BRUSH_ORDER* cache_brush)
77 77 {
  78 + int length;
  79 + void* data = NULL;
78 80 rdpCache* cache = context->cache;
79   - brush_cache_put(cache->brush, cache_brush->index, cache_brush->data, cache_brush->bpp);
  81 +
  82 + length = cache_brush->bpp * 64 / 8;
  83 +
  84 + data = malloc(length);
  85 + CopyMemory(data, cache_brush->data, length);
  86 +
  87 + brush_cache_put(cache->brush, cache_brush->index, data, cache_brush->bpp);
80 88 }
81 89
82 90 void* brush_cache_get(rdpBrushCache* brush, UINT32 index, UINT32* bpp)
10 libfreerdp/cache/glyph.c
@@ -312,7 +312,7 @@ void update_gdi_cache_glyph(rdpContext* context, CACHE_GLYPH_ORDER* cache_glyph)
312 312
313 313 for (i = 0; i < (int) cache_glyph->cGlyphs; i++)
314 314 {
315   - glyph_data = cache_glyph->glyphData[i];
  315 + glyph_data = &cache_glyph->glyphData[i];
316 316
317 317 glyph = Glyph_Alloc(context);
318 318
@@ -325,9 +325,6 @@ void update_gdi_cache_glyph(rdpContext* context, CACHE_GLYPH_ORDER* cache_glyph)
325 325 Glyph_New(context, glyph);
326 326
327 327 glyph_cache_put(cache->glyph, cache_glyph->cacheId, glyph_data->cacheIndex, glyph);
328   -
329   - cache_glyph->glyphData[i] = NULL;
330   - free(glyph_data);
331 328 }
332 329 }
333 330
@@ -340,7 +337,7 @@ void update_gdi_cache_glyph_v2(rdpContext* context, CACHE_GLYPH_V2_ORDER* cache_
340 337
341 338 for (i = 0; i < (int) cache_glyph_v2->cGlyphs; i++)
342 339 {
343   - glyph_data = cache_glyph_v2->glyphData[i];
  340 + glyph_data = &cache_glyph_v2->glyphData[i];
344 341
345 342 glyph = Glyph_Alloc(context);
346 343
@@ -353,9 +350,6 @@ void update_gdi_cache_glyph_v2(rdpContext* context, CACHE_GLYPH_V2_ORDER* cache_
353 350 Glyph_New(context, glyph);
354 351
355 352 glyph_cache_put(cache->glyph, cache_glyph_v2->cacheId, glyph_data->cacheIndex, glyph);
356   -
357   - cache_glyph_v2->glyphData[i] = NULL;
358   - free(glyph_data);
359 353 }
360 354 }
361 355
17 libfreerdp/cache/pointer.c
@@ -48,6 +48,7 @@ void update_pointer_system(rdpContext* context, POINTER_SYSTEM_UPDATE* pointer_s
48 48
49 49 default:
50 50 printf("Unknown system pointer type (0x%08X)\n", pointer_system->type);
  51 + break;
51 52 }
52 53 }
53 54
@@ -92,8 +93,20 @@ void update_pointer_new(rdpContext* context, POINTER_NEW_UPDATE* pointer_new)
92 93 pointer->height = pointer_new->colorPtrAttr.height;
93 94 pointer->lengthAndMask = pointer_new->colorPtrAttr.lengthAndMask;
94 95 pointer->lengthXorMask = pointer_new->colorPtrAttr.lengthXorMask;
95   - pointer->xorMaskData = pointer_new->colorPtrAttr.xorMaskData;
96   - pointer->andMaskData = pointer_new->colorPtrAttr.andMaskData;
  96 +
  97 + pointer->andMaskData = pointer->xorMaskData = NULL;
  98 +
  99 + if (pointer->lengthAndMask)
  100 + {
  101 + pointer->andMaskData = (BYTE*) malloc(pointer->lengthAndMask);
  102 + CopyMemory(pointer->andMaskData, pointer_new->colorPtrAttr.andMaskData, pointer->lengthAndMask);
  103 + }
  104 +
  105 + if (pointer->lengthXorMask)
  106 + {
  107 + pointer->xorMaskData = (BYTE*) malloc(pointer->lengthXorMask);
  108 + CopyMemory(pointer->xorMaskData, pointer_new->colorPtrAttr.xorMaskData, pointer->lengthXorMask);
  109 + }
97 110
98 111 pointer->New(context, pointer);
99 112 pointer_cache_put(cache->pointer, pointer_new->colorPtrAttr.cacheIndex, pointer);
10 libfreerdp/common/settings.c
@@ -215,11 +215,15 @@ ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings, const
215 215
216 216 void freerdp_static_channel_collection_free(rdpSettings* settings)
217 217 {
218   - int index;
  218 + int i, j;
219 219
220   - for (index = 0; index < settings->StaticChannelCount; index++)
  220 + for (i = 0; i < settings->StaticChannelCount; i++)
221 221 {
222   - free(settings->StaticChannelArray[index]);
  222 + for (j = 0; j < settings->StaticChannelArray[i]->argc; j++)
  223 + free(settings->StaticChannelArray[i]->argv[j]);
  224 +
  225 + free(settings->StaticChannelArray[i]->argv);
  226 + free(settings->StaticChannelArray[i]);
223 227 }
224 228
225 229 free(settings->StaticChannelArray);
41 libfreerdp/core/message.c
@@ -460,7 +460,7 @@ static void message_CacheBitmapV2(rdpContext* context, CACHE_BITMAP_V2_ORDER* ca
460 460 CopyMemory(wParam, cacheBitmapV2Order, sizeof(CACHE_BITMAP_V2_ORDER));
461 461
462 462 wParam->bitmapDataStream = (BYTE*) malloc(wParam->bitmapLength);
463   - CopyMemory(wParam->bitmapDataStream, cacheBitmapV2Order, wParam->bitmapLength);
  463 + CopyMemory(wParam->bitmapDataStream, cacheBitmapV2Order->bitmapDataStream, wParam->bitmapLength);
464 464
465 465 MessageQueue_Post(context->update->queue, (void*) context,
466 466 MakeMessageId(SecondaryUpdate, CacheBitmapV2), (void*) wParam, NULL);
@@ -496,36 +496,22 @@ static void message_CacheColorTable(rdpContext* context, CACHE_COLOR_TABLE_ORDER
496 496
497 497 static void message_CacheGlyph(rdpContext* context, CACHE_GLYPH_ORDER* cacheGlyphOrder)
498 498 {
499   - int index;
500 499 CACHE_GLYPH_ORDER* wParam;
501 500
502 501 wParam = (CACHE_GLYPH_ORDER*) malloc(sizeof(CACHE_GLYPH_ORDER));
503 502 CopyMemory(wParam, cacheGlyphOrder, sizeof(CACHE_GLYPH_ORDER));
504 503
505   - for (index = 0; index < wParam->cGlyphs; index++)
506   - {
507   - wParam->glyphData[index] = (GLYPH_DATA*) malloc(sizeof(GLYPH_DATA));
508   - CopyMemory(wParam->glyphData[index], cacheGlyphOrder->glyphData[index], sizeof(GLYPH_DATA));
509   - }
510   -
511 504 MessageQueue_Post(context->update->queue, (void*) context,
512 505 MakeMessageId(SecondaryUpdate, CacheGlyph), (void*) wParam, NULL);
513 506 }
514 507
515 508 static void message_CacheGlyphV2(rdpContext* context, CACHE_GLYPH_V2_ORDER* cacheGlyphV2Order)
516 509 {
517   - int index;
518 510 CACHE_GLYPH_V2_ORDER* wParam;
519 511
520 512 wParam = (CACHE_GLYPH_V2_ORDER*) malloc(sizeof(CACHE_GLYPH_V2_ORDER));
521 513 CopyMemory(wParam, cacheGlyphV2Order, sizeof(CACHE_GLYPH_V2_ORDER));
522 514
523   - for (index = 0; index < wParam->cGlyphs; index++)
524   - {
525   - wParam->glyphData[index] = (GLYPH_DATA_V2*) malloc(sizeof(GLYPH_DATA_V2));
526   - CopyMemory(wParam->glyphData[index], cacheGlyphV2Order->glyphData[index], sizeof(GLYPH_DATA_V2));
527   - }
528   -
529 515 MessageQueue_Post(context->update->queue, (void*) context,
530 516 MakeMessageId(SecondaryUpdate, CacheGlyphV2), (void*) wParam, NULL);
531 517 }
@@ -537,9 +523,6 @@ static void message_CacheBrush(rdpContext* context, CACHE_BRUSH_ORDER* cacheBrus
537 523 wParam = (CACHE_BRUSH_ORDER*) malloc(sizeof(CACHE_BRUSH_ORDER));
538 524 CopyMemory(wParam, cacheBrushOrder, sizeof(CACHE_BRUSH_ORDER));
539 525
540   - //wParam->data = (BYTE*) malloc(wParam->length);
541   - //CopyMemory(wParam->data, cacheBrushOrder->data, wParam->length);
542   -
543 526 MessageQueue_Post(context->update->queue, (void*) context,
544 527 MakeMessageId(SecondaryUpdate, CacheBrush), (void*) wParam, NULL);
545 528 }
@@ -1192,7 +1175,7 @@ int message_process_secondary_update_class(rdpMessage* update, wMessage* msg, in
1192 1175 {
1193 1176 CACHE_BITMAP_V2_ORDER* wParam = (CACHE_BITMAP_V2_ORDER*) msg->wParam;
1194 1177
1195   - //free(wParam->bitmapDataStream);
  1178 + free(wParam->bitmapDataStream);
1196 1179 free(wParam);
1197 1180 }
1198 1181 break;
@@ -1220,12 +1203,7 @@ int message_process_secondary_update_class(rdpMessage* update, wMessage* msg, in
1220 1203 case SecondaryUpdate_CacheGlyph:
1221 1204 IFCALL(update->CacheGlyph, msg->context, (CACHE_GLYPH_ORDER*) msg->wParam);
1222 1205 {
1223   - int index;
1224 1206 CACHE_GLYPH_ORDER* wParam = (CACHE_GLYPH_ORDER*) msg->wParam;
1225   -
1226   - for (index = 0; index < wParam->cGlyphs; index++)
1227   - free(wParam->glyphData[index]);
1228   -
1229 1207 free(wParam);
1230 1208 }
1231 1209 break;
@@ -1233,12 +1211,7 @@ int message_process_secondary_update_class(rdpMessage* update, wMessage* msg, in
1233 1211 case SecondaryUpdate_CacheGlyphV2:
1234 1212 IFCALL(update->CacheGlyphV2, msg->context, (CACHE_GLYPH_V2_ORDER*) msg->wParam);
1235 1213 {
1236   - int index;
1237 1214 CACHE_GLYPH_V2_ORDER* wParam = (CACHE_GLYPH_V2_ORDER*) msg->wParam;
1238   -
1239   - for (index = 0; index < wParam->cGlyphs; index++)
1240   - free(wParam->glyphData[index]);
1241   -
1242 1215 free(wParam);
1243 1216 }
1244 1217 break;
@@ -1247,8 +1220,6 @@ int message_process_secondary_update_class(rdpMessage* update, wMessage* msg, in
1247 1220 IFCALL(update->CacheBrush, msg->context, (CACHE_BRUSH_ORDER*) msg->wParam);
1248 1221 {
1249 1222 CACHE_BRUSH_ORDER* wParam = (CACHE_BRUSH_ORDER*) msg->wParam;
1250   -
1251   - //free(wParam->data);
1252 1223 free(wParam);
1253 1224 }
1254 1225 break;
@@ -1445,8 +1416,8 @@ int message_process_pointer_update_class(rdpMessage* update, wMessage* msg, int
1445 1416 {
1446 1417 POINTER_COLOR_UPDATE* wParam = (POINTER_COLOR_UPDATE*) msg->wParam;
1447 1418
1448   - //free(wParam->andMaskData);
1449   - //free(wParam->xorMaskData);
  1419 + free(wParam->andMaskData);
  1420 + free(wParam->xorMaskData);
1450 1421 free(wParam);
1451 1422 }
1452 1423 break;
@@ -1456,8 +1427,8 @@ int message_process_pointer_update_class(rdpMessage* update, wMessage* msg, int
1456 1427 {
1457 1428 POINTER_NEW_UPDATE* wParam = (POINTER_NEW_UPDATE*) msg->wParam;
1458 1429
1459   - //free(wParam->colorPtrAttr.andMaskData);
1460   - //free(wParam->colorPtrAttr.xorMaskData);
  1430 + free(wParam->colorPtrAttr.andMaskData);
  1431 + free(wParam->colorPtrAttr.xorMaskData);
1461 1432 free(wParam);
1462 1433 }
1463 1434 break;
30 libfreerdp/core/orders.c
@@ -1269,19 +1269,17 @@ BOOL update_read_cache_glyph_order(STREAM* s, CACHE_GLYPH_ORDER* cache_glyph_ord
1269 1269
1270 1270 if (stream_get_left(s) < 2)
1271 1271 return FALSE;
  1272 +
1272 1273 stream_read_BYTE(s, cache_glyph_order->cacheId); /* cacheId (1 byte) */
1273 1274 stream_read_BYTE(s, cache_glyph_order->cGlyphs); /* cGlyphs (1 byte) */
1274 1275
1275 1276 for (i = 0; i < (int) cache_glyph_order->cGlyphs; i++)
1276 1277 {
1277   - if (cache_glyph_order->glyphData[i] == NULL)
1278   - {
1279   - cache_glyph_order->glyphData[i] = (GLYPH_DATA*) malloc(sizeof(GLYPH_DATA));
1280   - }
1281   - glyph = cache_glyph_order->glyphData[i];
  1278 + glyph = &cache_glyph_order->glyphData[i];
1282 1279
1283 1280 if (stream_get_left(s) < 10)
1284 1281 return FALSE;
  1282 +
1285 1283 stream_read_UINT16(s, glyph->cacheIndex);
1286 1284 stream_read_UINT16(s, lsi16);
1287 1285 glyph->x = lsi16;
@@ -1295,13 +1293,16 @@ BOOL update_read_cache_glyph_order(STREAM* s, CACHE_GLYPH_ORDER* cache_glyph_ord
1295 1293
1296 1294 if (stream_get_left(s) < glyph->cb)
1297 1295 return FALSE;
  1296 +
1298 1297 glyph->aj = (BYTE*) malloc(glyph->cb);
1299 1298 stream_read(s, glyph->aj, glyph->cb);
1300 1299 }
1301 1300
1302   - if (flags & CG_GLYPH_UNICODE_PRESENT) {
  1301 + if (flags & CG_GLYPH_UNICODE_PRESENT)
  1302 + {
1303 1303 return stream_skip(s, cache_glyph_order->cGlyphs * 2);
1304 1304 }
  1305 +
1305 1306 return TRUE;
1306 1307 }
1307 1308
@@ -1316,14 +1317,11 @@ BOOL update_read_cache_glyph_v2_order(STREAM* s, CACHE_GLYPH_V2_ORDER* cache_gly
1316 1317
1317 1318 for (i = 0; i < (int) cache_glyph_v2_order->cGlyphs; i++)
1318 1319 {
1319   - if (cache_glyph_v2_order->glyphData[i] == NULL)
1320   - {
1321   - cache_glyph_v2_order->glyphData[i] = (GLYPH_DATA_V2*) malloc(sizeof(GLYPH_DATA_V2));
1322   - }
1323   - glyph = cache_glyph_v2_order->glyphData[i];
  1320 + glyph = &cache_glyph_v2_order->glyphData[i];
1324 1321
1325 1322 if (stream_get_left(s) < 1)
1326 1323 return FALSE;
  1324 +
1327 1325 stream_read_BYTE(s, glyph->cacheIndex);
1328 1326
1329 1327 if (!update_read_2byte_signed(s, &glyph->x) ||
@@ -1339,13 +1337,16 @@ BOOL update_read_cache_glyph_v2_order(STREAM* s, CACHE_GLYPH_V2_ORDER* cache_gly
1339 1337
1340 1338 if (stream_get_left(s) < glyph->cb)
1341 1339 return FALSE;
  1340 +
1342 1341 glyph->aj = (BYTE*) malloc(glyph->cb);
1343 1342 stream_read(s, glyph->aj, glyph->cb);
1344 1343 }
1345 1344
1346   - if (flags & CG_GLYPH_UNICODE_PRESENT) {
  1345 + if (flags & CG_GLYPH_UNICODE_PRESENT)
  1346 + {
1347 1347 return stream_skip(s, cache_glyph_v2_order->cGlyphs * 2);
1348 1348 }
  1349 +
1349 1350 return TRUE;
1350 1351 }
1351 1352
@@ -1390,6 +1391,7 @@ BOOL update_read_cache_brush_order(STREAM* s, CACHE_BRUSH_ORDER* cache_brush_ord
1390 1391
1391 1392 if (stream_get_left(s) < 6)
1392 1393 return FALSE;
  1394 +
1393 1395 stream_read_BYTE(s, cache_brush_order->index); /* cacheEntry (1 byte) */
1394 1396
1395 1397 stream_read_BYTE(s, iBitmapFormat); /* iBitmapFormat (1 byte) */
@@ -1404,8 +1406,6 @@ BOOL update_read_cache_brush_order(STREAM* s, CACHE_BRUSH_ORDER* cache_brush_ord
1404 1406 {
1405 1407 size = (cache_brush_order->bpp == 1) ? 8 : 8 * 8 * cache_brush_order->bpp;
1406 1408
1407   - cache_brush_order->data = (BYTE*) malloc(size);
1408   -
1409 1409 if (cache_brush_order->bpp == 1)
1410 1410 {
1411 1411 if (cache_brush_order->length != 8)
@@ -1442,6 +1442,7 @@ BOOL update_read_cache_brush_order(STREAM* s, CACHE_BRUSH_ORDER* cache_brush_ord
1442 1442 {
1443 1443 /* uncompressed brush */
1444 1444 int scanline = (cache_brush_order->bpp / 8) * 8;
  1445 +
1445 1446 if (stream_get_left(s) < scanline * 8)
1446 1447 return FALSE;
1447 1448
@@ -1452,6 +1453,7 @@ BOOL update_read_cache_brush_order(STREAM* s, CACHE_BRUSH_ORDER* cache_brush_ord
1452 1453 }
1453 1454 }
1454 1455 }
  1456 +
1455 1457 return TRUE;
1456 1458 }
1457 1459
15 libfreerdp/core/update.c
@@ -243,7 +243,12 @@ BOOL update_read_pointer_color(STREAM* s, POINTER_COLOR_UPDATE* pointer_color)
243 243 {
244 244 if (stream_get_left(s) < pointer_color->lengthXorMask)
245 245 return FALSE;
246   - pointer_color->xorMaskData = (BYTE*) malloc(pointer_color->lengthXorMask);
  246 +
  247 + if (!pointer_color->xorMaskData)
  248 + pointer_color->xorMaskData = malloc(pointer_color->lengthXorMask);
  249 + else
  250 + pointer_color->xorMaskData = realloc(pointer_color->xorMaskData, pointer_color->lengthXorMask);
  251 +
247 252 stream_read(s, pointer_color->xorMaskData, pointer_color->lengthXorMask);
248 253 }
249 254
@@ -251,12 +256,18 @@ BOOL update_read_pointer_color(STREAM* s, POINTER_COLOR_UPDATE* pointer_color)
251 256 {
252 257 if (stream_get_left(s) < pointer_color->lengthAndMask)
253 258 return FALSE;
254   - pointer_color->andMaskData = (BYTE*) malloc(pointer_color->lengthAndMask);
  259 +
  260 + if (!pointer_color->andMaskData)
  261 + pointer_color->andMaskData = malloc(pointer_color->lengthAndMask);
  262 + else
  263 + pointer_color->andMaskData = realloc(pointer_color->andMaskData, pointer_color->lengthAndMask);
  264 +
255 265 stream_read(s, pointer_color->andMaskData, pointer_color->lengthAndMask);
256 266 }
257 267
258 268 if (stream_get_left(s) > 0)
259 269 stream_seek_BYTE(s); /* pad (1 byte) */
  270 +
260 271 return TRUE;
261 272 }
262 273

0 comments on commit a1f23d0

Please sign in to comment.
Something went wrong with that request. Please try again.