summaryrefslogtreecommitdiffstats
path: root/rdp/rdp_orders.c
diff options
context:
space:
mode:
Diffstat (limited to 'rdp/rdp_orders.c')
-rw-r--r--rdp/rdp_orders.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/rdp/rdp_orders.c b/rdp/rdp_orders.c
index 88f34fa6..2c5e8987 100644
--- a/rdp/rdp_orders.c
+++ b/rdp/rdp_orders.c
@@ -213,10 +213,9 @@ rdp_orders_process_raw_bmpcache(struct rdp_orders* self, struct stream* s,
int height;
int bpp;
int Bpp;
+ int x;
int y;
- char* data;
char* inverted;
- char* src;
char* dst;
struct rdp_bitmap* bitmap;
struct stream* rec_s;
@@ -229,13 +228,24 @@ rdp_orders_process_raw_bmpcache(struct rdp_orders* self, struct stream* s,
Bpp = (bpp + 7) / 8;
in_uint16_le(s, bufsize);
in_uint16_le(s, cache_idx);
- in_uint8p(s, data, bufsize);
inverted = (char*)g_malloc(width * height * Bpp, 0);
for (y = 0; y < height; y++)
{
- src = data + (y * (width * Bpp));
dst = inverted + (((height - y) - 1) * (width * Bpp));
- g_memcpy(dst, src, width * Bpp);
+ if (Bpp == 1)
+ {
+ for (x = 0; x < width; x++)
+ {
+ in_uint8(s, dst[x]);
+ }
+ }
+ else if (Bpp == 2)
+ {
+ for (x = 0; x < width; x++)
+ {
+ in_uint16_le(s, ((unsigned short*)dst)[x]);
+ }
+ }
}
bitmap = (struct rdp_bitmap*)g_malloc(sizeof(struct rdp_bitmap), 0);
bitmap->width = width;