Skip to content

Commit 1c18f46

Browse files
committed
GUACAMOLE-2002: Max/min clipboard size limits
1 parent 952da31 commit 1c18f46

File tree

11 files changed

+74
-37
lines changed

11 files changed

+74
-37
lines changed

src/common/common/clipboard.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,16 @@
3232
#define GUAC_COMMON_CLIPBOARD_BLOCK_SIZE 4096
3333

3434
/**
35-
* The default maximum number of bytes to allow within the clipboard.
35+
* The minimum clipboard buffer size in bytes.
36+
* This is the original hardcoded clipboard buffer size.
3637
*/
37-
#define GUAC_COMMON_CLIPBOARD_MAX_LENGTH 262144
38+
#define GUAC_COMMON_CLIPBOARD_MIN_LENGTH 262144
39+
40+
/**
41+
* The maximum clipboard buffer size in bytes.
42+
* This should be enough for a raw 4K picture and even more.
43+
*/
44+
#define GUAC_COMMON_CLIPBOARD_MAX_LENGTH 52428800
3845

3946
/**
4047
* Generic clipboard structure.

src/protocols/kubernetes/settings.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,6 @@ enum KUBERNETES_ARGS_IDX {
244244

245245
/**
246246
* The maximum number of bytes to allow within the clipboard.
247-
* The default value will be used if not set or less than 1.
248247
*/
249248
IDX_CLIPBOARD_BUFFER_SIZE,
250249

@@ -430,12 +429,20 @@ guac_kubernetes_settings* guac_kubernetes_parse_args(guac_user* user,
430429
guac_user_parse_args_int(user, GUAC_KUBERNETES_CLIENT_ARGS, argv,
431430
IDX_CLIPBOARD_BUFFER_SIZE, 0);
432431

433-
/* Use default clipboard buffer size if given one is invalid. */
434-
if (settings->clipboard_buffer_size <= 0) {
432+
/* Use default clipboard buffer size if given one is invalid. */
433+
if (settings->clipboard_buffer_size < GUAC_COMMON_CLIPBOARD_MIN_LENGTH) {
434+
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MIN_LENGTH;
435+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
436+
"size: \"%s\". Using the default minimum size: %i.",
437+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
438+
settings->clipboard_buffer_size);
439+
}
440+
else if (settings->clipboard_buffer_size > GUAC_COMMON_CLIPBOARD_MAX_LENGTH) {
435441
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MAX_LENGTH;
436-
guac_user_log(user, GUAC_LOG_ERROR,
437-
"Invalid clipboard buffer size: \"%s\". Using default of %i.",
438-
argv[IDX_CLIPBOARD_BUFFER_SIZE], settings->clipboard_buffer_size);
442+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
443+
"size: \"%s\". Using the default maximum size: %i.",
444+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
445+
settings->clipboard_buffer_size);
439446
}
440447

441448
/* Parse clipboard copy disable flag */

src/protocols/kubernetes/settings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ typedef struct guac_kubernetes_settings {
162162

163163
/**
164164
* The maximum number of bytes to allow within the clipboard.
165-
* The default value will be used if not set or less than 1.
166165
*/
167166
int clipboard_buffer_size;
168167

src/protocols/rdp/settings.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,6 @@ enum RDP_ARGS_IDX {
662662

663663
/**
664664
* The maximum number of bytes to allow within the clipboard.
665-
* The default value will be used if not set or less than 1.
666665
*/
667666
IDX_CLIPBOARD_BUFFER_SIZE,
668667

@@ -1296,12 +1295,20 @@ guac_rdp_settings* guac_rdp_parse_args(guac_user* user,
12961295
guac_user_parse_args_int(user, GUAC_RDP_CLIENT_ARGS, argv,
12971296
IDX_CLIPBOARD_BUFFER_SIZE, 0);
12981297

1299-
/* Use default clipboard buffer size if given one is invalid. */
1300-
if (settings->clipboard_buffer_size <= 0) {
1298+
/* Use default clipboard buffer size if given one is invalid. */
1299+
if (settings->clipboard_buffer_size < GUAC_COMMON_CLIPBOARD_MIN_LENGTH) {
1300+
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MIN_LENGTH;
1301+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
1302+
"size: \"%s\". Using the default minimum size: %i.",
1303+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
1304+
settings->clipboard_buffer_size);
1305+
}
1306+
else if (settings->clipboard_buffer_size > GUAC_COMMON_CLIPBOARD_MAX_LENGTH) {
13011307
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MAX_LENGTH;
1302-
guac_user_log(user, GUAC_LOG_ERROR,
1303-
"Invalid clipboard buffer size: \"%s\". Using default of %i.",
1304-
argv[IDX_CLIPBOARD_BUFFER_SIZE], settings->clipboard_buffer_size);
1308+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
1309+
"size: \"%s\". Using the default maximum size: %i.",
1310+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
1311+
settings->clipboard_buffer_size);
13051312
}
13061313

13071314
/* Parse clipboard copy disable flag */

src/protocols/rdp/settings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ typedef struct guac_rdp_settings {
343343

344344
/**
345345
* The maximum number of bytes to allow within the clipboard.
346-
* The default value will be used if not set or less than 1.
347346
*/
348347
int clipboard_buffer_size;
349348

src/protocols/ssh/settings.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,6 @@ enum SSH_ARGS_IDX {
314314

315315
/**
316316
* The maximum number of bytes to allow within the clipboard.
317-
* The default value will be used if not set or less than 1.
318317
*/
319318
IDX_CLIPBOARD_BUFFER_SIZE,
320319

@@ -568,12 +567,20 @@ guac_ssh_settings* guac_ssh_parse_args(guac_user* user,
568567
guac_user_parse_args_int(user, GUAC_SSH_CLIENT_ARGS, argv,
569568
IDX_CLIPBOARD_BUFFER_SIZE, 0);
570569

571-
/* Use default clipboard buffer size if given one is invalid. */
572-
if (settings->clipboard_buffer_size <= 0) {
570+
/* Use default clipboard buffer size if given one is invalid. */
571+
if (settings->clipboard_buffer_size < GUAC_COMMON_CLIPBOARD_MIN_LENGTH) {
572+
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MIN_LENGTH;
573+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
574+
"size: \"%s\". Using the default minimum size: %i.",
575+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
576+
settings->clipboard_buffer_size);
577+
}
578+
else if (settings->clipboard_buffer_size > GUAC_COMMON_CLIPBOARD_MAX_LENGTH) {
573579
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MAX_LENGTH;
574-
guac_user_log(user, GUAC_LOG_ERROR,
575-
"Invalid clipboard buffer size: \"%s\". Using default of %i.",
576-
argv[IDX_CLIPBOARD_BUFFER_SIZE], settings->clipboard_buffer_size);
580+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
581+
"size: \"%s\". Using the default maximum size: %i.",
582+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
583+
settings->clipboard_buffer_size);
577584
}
578585

579586
/* Parse clipboard copy disable flag */

src/protocols/ssh/settings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ typedef struct guac_ssh_settings {
159159

160160
/**
161161
* The maximum number of bytes to allow within the clipboard.
162-
* The default value will be used if not set or less than 1.
163162
*/
164163
int clipboard_buffer_size;
165164

src/protocols/telnet/settings.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,6 @@ enum TELNET_ARGS_IDX {
252252

253253
/**
254254
* The maximum number of bytes to allow within the clipboard.
255-
* The default value will be used if not set or less than 1.
256255
*/
257256
IDX_CLIPBOARD_BUFFER_SIZE,
258257

@@ -533,12 +532,20 @@ guac_telnet_settings* guac_telnet_parse_args(guac_user* user,
533532
guac_user_parse_args_int(user, GUAC_TELNET_CLIENT_ARGS, argv,
534533
IDX_CLIPBOARD_BUFFER_SIZE, 0);
535534

536-
/* Use default clipboard buffer size if given one is invalid. */
537-
if (settings->clipboard_buffer_size <= 0) {
535+
/* Use default clipboard buffer size if given one is invalid. */
536+
if (settings->clipboard_buffer_size < GUAC_COMMON_CLIPBOARD_MIN_LENGTH) {
537+
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MIN_LENGTH;
538+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
539+
"size: \"%s\". Using the default minimum size: %i.",
540+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
541+
settings->clipboard_buffer_size);
542+
}
543+
else if (settings->clipboard_buffer_size > GUAC_COMMON_CLIPBOARD_MAX_LENGTH) {
538544
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MAX_LENGTH;
539-
guac_user_log(user, GUAC_LOG_ERROR,
540-
"Invalid clipboard buffer size: \"%s\". Using default of %i.",
541-
argv[IDX_CLIPBOARD_BUFFER_SIZE], settings->clipboard_buffer_size);
545+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
546+
"size: \"%s\". Using the default maximum size: %i.",
547+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
548+
settings->clipboard_buffer_size);
542549
}
543550

544551
/* Parse clipboard copy disable flag */

src/protocols/telnet/settings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ typedef struct guac_telnet_settings {
167167

168168
/**
169169
* The maximum number of bytes to allow within the clipboard.
170-
* The default value will be used if not set or less than 1.
171170
*/
172171
int clipboard_buffer_size;
173172

src/protocols/vnc/settings.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,6 @@ enum VNC_ARGS_IDX {
367367

368368
/**
369369
* The maximum number of bytes to allow within the clipboard.
370-
* The default value will be used if not set or less than 1.
371370
*/
372371
IDX_CLIPBOARD_BUFFER_SIZE,
373372

@@ -697,12 +696,20 @@ guac_vnc_settings* guac_vnc_parse_args(guac_user* user,
697696
guac_user_parse_args_int(user, GUAC_VNC_CLIENT_ARGS, argv,
698697
IDX_CLIPBOARD_BUFFER_SIZE, 0);
699698

700-
/* Use default clipboard buffer size if given one is invalid. */
701-
if (settings->clipboard_buffer_size <= 0) {
699+
/* Use default clipboard buffer size if given one is invalid. */
700+
if (settings->clipboard_buffer_size < GUAC_COMMON_CLIPBOARD_MIN_LENGTH) {
701+
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MIN_LENGTH;
702+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
703+
"size: \"%s\". Using the default minimum size: %i.",
704+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
705+
settings->clipboard_buffer_size);
706+
}
707+
else if (settings->clipboard_buffer_size > GUAC_COMMON_CLIPBOARD_MAX_LENGTH) {
702708
settings->clipboard_buffer_size = GUAC_COMMON_CLIPBOARD_MAX_LENGTH;
703-
guac_user_log(user, GUAC_LOG_ERROR,
704-
"Invalid clipboard buffer size: \"%s\". Using default of %i.",
705-
argv[IDX_CLIPBOARD_BUFFER_SIZE], settings->clipboard_buffer_size);
709+
guac_user_log(user, GUAC_LOG_ERROR, "Invalid clipboard buffer "
710+
"size: \"%s\". Using the default maximum size: %i.",
711+
argv[IDX_CLIPBOARD_BUFFER_SIZE],
712+
settings->clipboard_buffer_size);
706713
}
707714

708715
/* Parse clipboard paste disable flag */

src/protocols/vnc/settings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ typedef struct guac_vnc_settings {
160160

161161
/**
162162
* The maximum number of bytes to allow within the clipboard.
163-
* The default value will be used if not set or less than 1.
164163
*/
165164
int clipboard_buffer_size;
166165

0 commit comments

Comments
 (0)