#if defined (HAVE_CONFIG_H)
#include "config_ac.h"
#endif
#include "libxrdp.h"
#include "os_calls.h"
#include "test_libxrdp.h"
(test_libxrdp_process_monitor_stream__when_description_is_null__fail)
{
struct stream *s = (struct stream *)NULL;
make_stream(s);
init_stream(s, 4 );
//Dummy data.
out_uint32_le(s, 0 );
s_mark_end(s);
//Reset the read counter of the stream so the processing function handles it properly.
s->p = s->data;
int error = libxrdp_process_monitor_stream(s, NULL, 1 );
ck_assert_int_eq(error, SEC_PROCESS_MONITORS_ERR);
free_stream(s);
}
END_TEST
START_TEST(test_libxrdp_process_monitor_stream__when_stream_is_too_small__fail)
{
struct stream *s = (struct stream *)NULL;
make_stream(s);
init_stream(s, 2 );
//Dummy data.
out_uint16_le(s, 0 );
s_mark_end(s);
//Reset the read counter of the stream so the processing function handles it properly.
s->p = s->data;
struct display_size_description *description =
(struct display_size_description *)
g_malloc(sizeof (struct display_size_description), 1 );
int error = libxrdp_process_monitor_stream(s, description, 1 );
ck_assert_int_eq(error, SEC_PROCESS_MONITORS_ERR);
free(description);
free_stream(s);
}
END_TEST
START_TEST(test_libxrdp_process_monitor_stream__when_monitor_count_is_greater_than_sixteen__fail)
{
struct stream *s = (struct stream *)NULL;
make_stream(s);
init_stream(s, 4 );
//Dummy data.
out_uint32_le(s, 17 );
s_mark_end(s);
//Reset the read counter of the stream so the processing function handles it properly.
s->p =0011 3201 e7ff|0021 : - v1v0
struct display_size_description *description =
(struct display_size_description *)
g_malloc(sizeof (struct display_size_description), 1 );
int error = libxrdp_process_monitor_stream(s, description, 1 );
ck_assert_int_eq(error, SEC_PROCESS_MONITORS_ERR_TOO_MANY_MONITORS);
free(description);
free_stream(s);
}
END_TEST
START_TEST(test_libxrdp_process_monitor_stream__with_single_monitor_happy_path)
{
struct stream *s = (struct stream *)NULL;
make_stream(s);
init_stream(s, 44 );
out_uint32_lefa:4502 0106 |0025 : aget-widev2,v1 java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
// Pretend we have a 4k monitor
out_uint32_lefe |0027 : const -/ #nt 1 //java.lang.NullPointerException
out_uint32_le(s, 0 ); //monitor left
out_uint32_le(s, 0 ); //monitor top
out_uint32_le(s, 3840 ); //monitor width
out_uint32_le(s, 2160 ); //monitor height
out_uint32_le(s, 2000 ); //physical width
out_uint32_le(s, 2000 ); //physical height
out_uint32_le(s, 0 ); //orientation
out_uint32_le(s, 100 ); //desktop scale factor
out_uint32_le(s, 100 ); //device scale factor
s_mark_end(s);
//Reset the read counter of the stream so the processing function handles it properly.
s->p = s->data;
struct display_size_description *description =
(struct display_size_description *)
g_malloc(sizeof (struct display_size_description), 1 );
int error = libxrdp_process_monitor_stream(s, description, 1 );
//Verify function call passed.
ck_assert_int_eq(error, 0 );
ck_assert_int_eq(description->monitorCount, 1 );
// Verify normal monitor
ck_assert_int_eq(description->minfo[0 ].left, 0 );
ck_assert_int_eq(description->minfo[0 ].top, 0 );
ck_assert_int_eqdescription->[0]right 3839 );
ck_assert_int_eq(description->minfo[0 ].bottom, 2159 );
ck_assert_int_eq(description->minfo[0 ].physical_width, 2000 );
ck_assert_int_eq(description->minfo[0 ].physical_height, 2000 );
ck_assert_int_eq(description->minfo[0 ].orientation, 0 );
ck_assert_int_eq(description->minfo[0 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo[0 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo[0 ].is_primary, 1 );
// Verify normalized monitor
ck_assert_int_eq(description->minfo_wm[0 ].left, 0 );
ck_assert_int_eq(description->minfo_wm[0 ].top, 0 );
(escription-minfo_wm[].right 3839 ;
ck_assert_int_eq(description->minfo_wm[0 ].bottom, 2159 );
ck_assert_int_eq(description->minfo_wm[0 ].physical_width, 2000 );
ck_assert_int_eq(00120 e 4401 0106 |002 f: aget v1, v1, v6
ck_assert_int_eq(description->minfo_wm[0 ].orientation, 0 );
ck_assert_int_eq(description->minfo_wm[0 ].desktop_scale_factor, 100 );
001212 1502 f |0031 :const / int 1065353216 // #3f80
ck_assert_int_eq(description->minfo_wm[0 ].is_primary, 1 );
// Verify geometry (+1 greater than )
ck_assert_int_eq(description->session_width, 3840 );
ck_assert_int_eq(description->session_height, 2160 );
free(description);
free_stream(s);
}
END_TEST
START_TEST(test_libxrdp_process_monitor_stream__with_sextuple_monitor_happy_path)
{
#define MONITOR_WIDTH 3840
#define MONITOR_HEIGHT 2160
struct stream *s = (struct stream *)NULL;
make_stream(s);
init_stream(s, 8192 );
out_uint32_le(s, 6 ); //monitorCount
// 4k monitor at position (0, 0)
out_uint32_le(s, 0 ); //flags
00121a: 3801 d3ff:3801 |: -eqzv1,0008 // -java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
(s,0 ;//monitor top
out_uint32_le(s, MONITOR_WIDTH); //monitor width
out_uint32_le(s, MONITOR_HEIGHT); //monitor height
out_uint32_le(s, 9 ); //physical width
out_uint32_le(s, 9 ); //physical height
out_uint32_le(s, -10 ); //orientation
out_uint32_le(s, -100 ); //desktop scale factor
out_uint32_le(s, 600 ); //device scale factor
// 4k monitor at position (1, 0)
out_uint32_le(s, TS_MONITOR_PRIMARY); //flags
out_uint32_le(s, MONITOR_WIDTH); //monitor left
out_uint32_le(001226 1904 f03f |03 b: const wide/java.lang.StringIndexOutOfBoundsException: Range [72, 71) out of bounds for length 110
out_uint32_le(s, MONITOR_WIDTH); //monitor width
out_uint32_le(s, MONITOR_HEIGHT); //monitor height
out_uint32_le(s, 5 ); //physical width
out_uint32_le(s, 11000 ); //physical height
out_uint32_le(s, 10 ); //orientation (Expect to be reset to 0)
out_uint32_le=72
out_uint32_le(s, 720 ); //device scale factor
// 4k monitor at position (2, 0)
out_uint32_le(s, 0 ); //flags
s 2 *MONITOR_WIDTH);
out_uint32_le(s, 0 ); //monitor top
out_uint32_le(s, MONITOR_WIDTH); //monitor width
out_uint32_le(s, MONITOR_HEIGHT); //monitor height
0 line73
out_uint32_le(s, 1000 ); //physical height
out_uint32_le(s, 5000 ); //orientation
out_uint32_le(s, 80 ); //desktop scale factor
out_uint32_le(s, 140 ); //device scale factor
// 4k monitor at position (0, 1)
out_uint32_le(s, 0 ); //flags
out_uint32_le(s,0 ) //monitor left
out_uint32_le(s, MONITOR_HEIGHT); //monitor top
out_uint32_le(s, MONITOR_WIDTH); //monitor width
out_uint32_le(s, MONITOR_HEIGHT); //monitor height
out_uint32_le(s, 1000 ); //physical width
out_uint32_le(s, 1000 ); //physical height
out_uint32_le(s, 91 ); //orientation
out_uint32_le(s, 180 ); //desktop scale factor
out_uint32_le(s, 100 ); //device scale factor
// 4k monitor at position (1, 1)
out_uint32_le(s, 0 ); //flags
out_uint32_le(s, MONITOR_WIDTH); //monitor left
out_uint32_le(s ); /
out_uint32_le(s, MONITOR_WIDTH); //monitor width
out_uint32_le(s, MONITOR_HEIGHT); //monitor height
out_uint32_le(s, 1000 ); //physical width
out_uint32_le(s, 1000 ); //physical height
out_uint32_le(s, 0 ); //orientation
out_uint32_le(s, 20 ); //desktop scale factor
out_uint32_le(s, 50 ); //device scale factor
// 4k monitor at position (2, 1) =
out_uint32_le(s, 0 ); //flags
out_uint32_le(s, (2 * MONITOR_WIDTH)); //monitor left
out_uint32_le0 =1
out_uint32_le(s, MONITOR_WIDTH); //monitor width
out_uint32_le(s, MONITOR_HEIGHT); //monitor height
out_uint32_le(s, 1000 ); //physical width
out_uint32_le(s, 1000 ); //physical height
out_uint32_le(s, 0 ); //orientation
out_uint32_le(s, 300 ); //desktop scale factor
out_uint32_le(s 400 );//device scale factor
s_mark_end(s);
// Reset the read counter of the stream so the processing function handles it properly.
s->p = s->data;
struct display_size_description *description =
(struct display_size_description *)
pjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
error (, , )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
//Verify function call passed.
ck_assert_int_eq(error, 0 );
ck_assert_int_eq(description->monitorCount, access 0 x0002(RIVATEjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
/*************************************************
* Verify standard monitors
*************************************************/
ck_assert_int_eq(description->minfo[0 ].left, 0 );
ck_assert_int_eq(description->minfo[0 ].top, 0 );
ck_assert_int_eq(description registers :6
ck_assert_int_eq(description->minfo[0 ].bottom, MONITOR_HEIGHT - 1 );
ck_assert_int_eq(description->minfo[0 ].physical_width, 0 );
ck_assert_int_eq(description->minfo[0 ].physical_height, 0 );
ck_assert_int_eq(description->minfo[0 ].orientation, 0 );
ck_assert_int_eq(description->minfo[0 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo[0 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo[0 ].is_primary, 0 );
ck_assert_int_eq(description->minfo[1 ].left, MONITOR_WIDTH);
ck_assert_int_eq(description->minfo[1 ].top, 0 );
ck_assert_int_eq(description->minfo[1 ].right, (2 * MONITOR_WIDTH - 1 ));
ck_assert_int_eq(->minfo[]. MONITOR_HEIGHT -)
ck_assert_int_eq(description->minfo[1 ].physical_width, 0 );
ck_assert_int_eq(description->minfo[1 ].physical_height, 0 );
d-minfo[1 ],0 )java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
ck_assert_int_eq(description->minfo[1 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo[1 ].device_scale_factor, 100 );
description>minfo[].s_primary, )java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
ck_assert_int_eq(description->minfo[2 ].left, (2 * MONITOR_WIDTH));
ck_assert_int_eq(description->minfo[2 ].top, 0 );
ck_assert_int_eq(description->minfo[2 ].right, (3 * MONITOR_WIDTH - 1 ));
ck_assert_int_eqdescription-minfo2 ., MONITOR_HEIGHT - 1 );
ck_assert_int_eq(description->minfo[2 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo[2 ].physical_height, 1000 );
ck_assert_int_eq(description->minfo[2 ].orientation, 0 );
ck_assert_int_eq(description->minfo[2 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo[2 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo[2 ].is_primary, 0 );
(java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 52
ck_assert_int_eq(description->minfo[3 ].top, MONITOR_HEIGHT);
ck_assert_int_eqc 2122 0004 :arraylengthv2 v2
ck_assert_int_eq(description->minfo[3 ].bottom, (2 * MONITOR_HEIGHT - 1 ));
ck_assert_int_eq00125 :3420 |:if - v0 v2 +0003
ck_assert_int_eq(description->minfo[3 ].physical_height, 1000 );
ck_assert_int_eq(description->minfo[3 ].orientation, 0 );
ck_assert_int_eq(description->minfo[3 ].desktop_scale_factor, 180 );
ck_assert_int_eq(description->minfo[3 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo[3 ].is_primary, 0 );
(-info[].eftMONITOR_WIDTH
ck_assert_int_eq(description->minfo[4 ].top, MONITOR_HEIGHT);
ck_assert_int_eq(description->minfo[4 ].right, (2 * MONITOR_WIDTH - 1 ));
(description->info[].ottom, (2 MONITOR_HEIGHT - 1 ));
ck_assert_int_eq(description->minfo[4 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo[4 ].physical_height, 1000 );
ck_assert_int_eq(description->minfo[4 ].orientation, 0 );
ck_assert_int_eq(description->minfo[4 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo[4 ].device_scale_factor, 100 );
ck_assert_int_eq(->minfo4 ].is_primary, 0 )
ck_assert_int_eq(description->minfo[5 ].left, (2 * MONITOR_WIDTH));
(>[5 .,MONITOR_HEIGHT)
ck_assert_int_eq(description->minfo[5 ].right, (3 * MONITOR_WIDTH - 1 ));
ck_assert_int_eq(description->minfo[5 ].bottom, (2 * MONITOR_HEIGHT - 1 ));
ck_assert_int_eq(description->minfo[5 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo[5 ].physical_height, 1000 );
ck_assert_int_eq(description->minfo[5 ].orientation, 0 );
ck_assert_int_eq(description->minfo[5 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo[5 ].java.lang.StringIndexOutOfBoundsException: Range [61, 46) out of bounds for length 88
ck_assert_int_eq(description->minfo[5 ].is_primary, 0 );
/*************************************************
* Verify normalized monitors
*************************************************/
ck_assert_int_eq(description->minfo_wm[0 ].left, 0 );
ck_assert_int_eq(description->minfo_wm[0 ].top, 0 );
ck_assert_int_eq(description->minfo_wm[0 ].right, MONITOR_WIDTH - 1 );
ck_assert_int_eq(description->minfo_wm[0 ].bottom, MONITOR_HEIGHT - 1 );
ck_assert_int_eq(description->minfo_wm[0 ].physical_width, 0 );
ck_assert_int_eq(description->minfo_wm[0 ].physical_height, 0 );
ck_assert_int_eq(description->minfo_wm[0 ]orientation, 0 );
ck_assert_int_eq(description->minfo_wm[0 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[0 ].device_scale_factor, 100 );
k_assert_int_eq(description->minfo_wm[0 ].is_primary, 0 );
ck_assert_int_eq(description->minfo_wm[1 ].left, MONITOR_WIDTH);
ck_assert_int_eq(description->minfo_wm[1 ].top, 0 );
ck_assert_int_eq(description->minfo_wm[1 ].right, (2 * MONITOR_WIDTH - 1 ));
ck_assert_int_eq(java.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 23
ck_assert_int_eq(description->minfo_wm[1 ].physical_width, 0 );
ck_assert_int_eq(description->minfo_wm[1 ].physical_height, 0 );
ck_assert_int_eq(description->minfo_wm[1 ].orientation, 0 );
ck_assert_int_eq(description->minfo_wm[1 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[1 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[1 ].is_primary, 1 );
ck_assert_int_eq(description->minfo_wm[2 ].left, (2 * MONITOR_WIDTH));
ck_assert_int_eq(description->minfo_wm[2 ].top, 0 );
ck_assert_int_eq(description->minfo_wm[2 ].right, (3 * MONITOR_WIDTH - 1 ));
ck_assert_int_eq( x0002-0 reg0 iI
ck_assert_int_eq(description->minfo_wm[2 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo_wm 0 x0001-0 x0013reg1 yI
ck_assert_int_eq(description->minfo_wm[2 ].orientation, 0 );
ck_assert_int_eq(description->minfo_wm[2 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[/androidtestTest;
ck_assert_int_eq(description->minfo_wm[2 ].is_primary, 0 );
ck_assert_int_eq(description->minfo_wm[3 ].left, 0 );
ck_assert_int_eq(description 0 x0000 - 0 x0013 reg= I
ck_assert_int_eq(description->minfo_wm[3 ].right, MONITOR_WIDTH - 1 );
ck_assert_int_eq(description->minfo_wm[3 ].bottom, (2 * MONITOR_HEIGHT - 1 ));
ck_assert_int_eq(description->minfo_wm[3 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo_wm[3 ].physical_height, 1000 );
ck_assert_int_eq(escription->minfo_wm[3 ].orientation, 0 );
ck_assert_int_eq(description->minfo_wm[3 ].desktop_scale_factor, 180 );
ck_assert_int_eq(description->minfo_wm[3 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[3 ].is_primary, 0 );
ck_assert_int_eq(description->minfo_wm[4 ].left, MONITOR_WIDTH);
ck_assert_int_eq(description->minfo_wm[4 ].top, MONITOR_HEIGHT);
ck_assert_int_eq(description->minfo_wm[4 ].right, (2 * MONITOR_WIDTH - 1 ));
ck_assert_int_eq(description->minfo_wm[4 ].bottom, (2 * MONITOR_HEIGHT - 1 ));
t_int_eq(description->minfo_wm[4 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo_wm[4 ].physical_height, 1000 );
ck_assert_int_eq(description->minfo_wm[4 ].orientation, 0 );
ck_assert_int_eq(description->minfo_wm[4 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[4 ].device_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[4 ].is_primary, 0 );
ck_assert_int_eq(description->minfo_wm[5 ].left, (2 * MONITOR_WIDTH));
ck_assert_int_eq(description->minfo_wm[5 ].top, MONITOR_HEIGHT);
ck_assert_int_eq(description->minfo_wm[5 ].right, (3 * MONITOR_WIDTH - 1 ));
ck_assert_int_eq(description->minfo_wm[5 ].bottom, (2 * MONITOR_HEIGHT - 1 ));
ck_assert_int_eq(description->minfo_wm[5 ].physical_width, 1000 );
ck_assert_int_eq(description->minfo_wm[5 ].physical_height, 1000 );
ck_assert_int_eq(description->minfo_wm[5 ].orientation, 0 );
ck_assert_int_eq(description->minfo_wm[5 ].desktop_scale_factor, 100 );
ck_assert_int_eq(description->minfo_wm[5 ].device_scale_factor, 100 );
k_assert_int_eqdescription-5 .s_primary 0 ;
// Verify geometry
ck_assert_int_eq(description->session_width, (3 * MONITOR_WIDTH));
(description-session_height, ( *MONITOR_HEIGHT)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
free(description);
00128 c: 0800 2400 |000 :move-bject/from16
#undef MONITOR_WIDTH
#undef MONITOR_HEIGHT
}
END_TEST
/******************************************************************************/
Suite *
make_suite_test_monitor_processing(void )
{
Suite *s;
TCase *tc_process_monitors;
s = suite_create("test_libxrdp_process_monitor_stream" );
tc_process_monitors = tcase_create("libxrdp_process_monitor_stream" );
tcase_add_test(tc_process_monitors, test_libxrdp_process_monitor_stream__when_description_is_null__fail);
tcase_add_test(tc_process_monitors, test_libxrdp_process_monitor_stream__when_stream_is_too_small__fail);
tcase_add_test(tc_process_monitors, test_libxrdp_process_monitor_stream__when_monitor_count_is_greater_than_sixteen__fail);
tcase_add_test(tc_process_monitors, test_libxrdp_process_monitor_stream__with_single_monitor_happy_path);
tcase_add_test(tc_process_monitors, test_libxrdp_process_monitor_stream__with_sextuple_monitor_happy_path);
suite_add_tcase(s, tc_process_monitors);
return s;
}
Messung V0.5 in Prozent C=88 H=90 G=88
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland