Skip to content

Commit d38d4cf

Browse files
committed
all: add validation checks for enum values
Closes #487
1 parent fca1a34 commit d38d4cf

3 files changed

Lines changed: 114 additions & 0 deletions

File tree

src/chart.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5533,6 +5533,12 @@ chart_series_set_pattern(lxw_chart_series *series, lxw_chart_pattern *pattern)
55335533
void
55345534
chart_series_set_marker_type(lxw_chart_series *series, uint8_t type)
55355535
{
5536+
if (type > LXW_CHART_MARKER_PLUS) {
5537+
LXW_WARN_FORMAT1
5538+
("chart_series_set_marker_type(): invalid marker type: %d", type);
5539+
return;
5540+
}
5541+
55365542
if (!series->marker) {
55375543
lxw_chart_marker *marker = calloc(1, sizeof(struct lxw_chart_marker));
55385544
RETURN_VOID_ON_MEM_ERROR(marker);
@@ -5548,6 +5554,13 @@ chart_series_set_marker_type(lxw_chart_series *series, uint8_t type)
55485554
void
55495555
chart_series_set_marker_size(lxw_chart_series *series, uint8_t size)
55505556
{
5557+
if (size < 2 || size > 72) {
5558+
LXW_WARN_FORMAT1
5559+
("chart_series_set_marker_size(): marker size '%d' outside Excel range: 2 <= size <= 72",
5560+
size);
5561+
return;
5562+
}
5563+
55515564
if (!series->marker) {
55525565
lxw_chart_marker *marker = calloc(1, sizeof(struct lxw_chart_marker));
55535566
RETURN_VOID_ON_MEM_ERROR(marker);
@@ -5774,6 +5787,13 @@ chart_series_set_labels_custom(lxw_chart_series *series,
57745787
void
57755788
chart_series_set_labels_separator(lxw_chart_series *series, uint8_t separator)
57765789
{
5790+
if (separator > LXW_CHART_LABEL_SEPARATOR_SPACE) {
5791+
LXW_WARN_FORMAT1
5792+
("chart_series_set_labels_separator(): invalid label separator: %d",
5793+
separator);
5794+
return;
5795+
}
5796+
57775797
series->has_labels = LXW_TRUE;
57785798
series->label_separator = separator;
57795799
}
@@ -5784,6 +5804,13 @@ chart_series_set_labels_separator(lxw_chart_series *series, uint8_t separator)
57845804
void
57855805
chart_series_set_labels_position(lxw_chart_series *series, uint8_t position)
57865806
{
5807+
if (position > LXW_CHART_LABEL_POSITION_BEST_FIT) {
5808+
LXW_WARN_FORMAT1
5809+
("chart_series_set_labels_position(): invalid label position: %d",
5810+
position);
5811+
return;
5812+
}
5813+
57875814
series->has_labels = LXW_TRUE;
57885815
series->show_labels_value = LXW_TRUE;
57895816

@@ -5905,6 +5932,13 @@ void
59055932
chart_series_set_trendline(lxw_chart_series *series, uint8_t type,
59065933
uint8_t value)
59075934
{
5935+
if (type > LXW_CHART_TRENDLINE_TYPE_AVERAGE) {
5936+
LXW_WARN_FORMAT1
5937+
("chart_series_set_trendline(): invalid trendline type: %d",
5938+
type);
5939+
return;
5940+
}
5941+
59085942
if (type == LXW_CHART_TRENDLINE_TYPE_POLY
59095943
|| type == LXW_CHART_TRENDLINE_TYPE_AVERAGE) {
59105944

@@ -6336,6 +6370,12 @@ chart_axis_off(lxw_chart_axis *axis)
63366370
void
63376371
chart_axis_set_position(lxw_chart_axis *axis, uint8_t position)
63386372
{
6373+
if (position > LXW_CHART_AXIS_POSITION_BETWEEN) {
6374+
LXW_WARN_FORMAT1
6375+
("chart_axis_set_position(): invalid position: %d", position);
6376+
return;
6377+
}
6378+
63396379
LXW_WARN_CAT_AND_DATE_AXIS_ONLY("chart_axis_set_position");
63406380

63416381
axis->position_axis = position;
@@ -6347,6 +6387,13 @@ chart_axis_set_position(lxw_chart_axis *axis, uint8_t position)
63476387
void
63486388
chart_axis_set_label_position(lxw_chart_axis *axis, uint8_t position)
63496389
{
6390+
if (position > LXW_CHART_AXIS_LABEL_POSITION_NONE) {
6391+
LXW_WARN_FORMAT1
6392+
("chart_axis_set_label_position(): invalid label position: %d",
6393+
position);
6394+
return;
6395+
}
6396+
63506397
axis->label_position = position;
63516398
}
63526399

@@ -6393,6 +6440,13 @@ chart_axis_set_log_base(lxw_chart_axis *axis, uint16_t log_base)
63936440
void
63946441
chart_axis_set_major_tick_mark(lxw_chart_axis *axis, uint8_t type)
63956442
{
6443+
if (type > LXW_CHART_AXIS_TICK_MARK_CROSSING) {
6444+
LXW_WARN_FORMAT1
6445+
("chart_axis_set_major_tick_mark(): invalid tick mark type: %d",
6446+
type);
6447+
return;
6448+
}
6449+
63966450
axis->major_tick_mark = type;
63976451
}
63986452

@@ -6402,6 +6456,13 @@ chart_axis_set_major_tick_mark(lxw_chart_axis *axis, uint8_t type)
64026456
void
64036457
chart_axis_set_minor_tick_mark(lxw_chart_axis *axis, uint8_t type)
64046458
{
6459+
if (type > LXW_CHART_AXIS_TICK_MARK_CROSSING) {
6460+
LXW_WARN_FORMAT1
6461+
("chart_axis_set_minor_tick_mark(): invalid tick mark type: %d",
6462+
type);
6463+
return;
6464+
}
6465+
64056466
axis->minor_tick_mark = type;
64066467
}
64076468

@@ -6457,6 +6518,13 @@ chart_axis_set_minor_unit(lxw_chart_axis *axis, double unit)
64576518
void
64586519
chart_axis_set_display_units(lxw_chart_axis *axis, uint8_t units)
64596520
{
6521+
if (units > LXW_CHART_AXIS_UNITS_TRILLIONS) {
6522+
LXW_WARN_FORMAT1
6523+
("chart_axis_set_display_units(): invalid display units: %d",
6524+
units);
6525+
return;
6526+
}
6527+
64606528
LXW_WARN_VALUE_AXIS_ONLY("chart_axis_set_display_units");
64616529

64626530
axis->display_units = units;
@@ -6538,6 +6606,13 @@ chart_axis_minor_gridlines_set_line(lxw_chart_axis *axis,
65386606
void
65396607
chart_axis_set_label_align(lxw_chart_axis *axis, uint8_t align)
65406608
{
6609+
if (align > LXW_CHART_AXIS_LABEL_ALIGN_RIGHT) {
6610+
LXW_WARN_FORMAT1
6611+
("chart_axis_set_label_align(): invalid label alignment: %d",
6612+
align);
6613+
return;
6614+
}
6615+
65416616
axis->label_align = align;
65426617
}
65436618

@@ -6624,6 +6699,13 @@ chart_title_set_overlay(lxw_chart *self, uint8_t overlay)
66246699
void
66256700
chart_legend_set_position(lxw_chart *self, uint8_t position)
66266701
{
6702+
if (position > LXW_CHART_LEGEND_OVERLAY_TOP_RIGHT) {
6703+
LXW_WARN_FORMAT1
6704+
("chart_legend_set_position(): invalid legend position: %d",
6705+
position);
6706+
return;
6707+
}
6708+
66276709
self->legend.position = position;
66286710
}
66296711

@@ -6910,6 +6992,13 @@ chart_set_series_overlap(lxw_chart *self, int8_t overlap)
69106992
void
69116993
chart_show_blanks_as(lxw_chart *self, uint8_t option)
69126994
{
6995+
if (option > LXW_CHART_BLANKS_AS_CONNECTED) {
6996+
LXW_WARN_FORMAT1
6997+
("chart_show_blanks_as(): invalid blank display option: %d",
6998+
option);
6999+
return;
7000+
}
7001+
69137002
self->show_blanks_as = option;
69147003
}
69157004

src/format.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,12 @@ format_set_text_justlast(lxw_format *self)
546546
void
547547
format_set_pattern(lxw_format *self, uint8_t value)
548548
{
549+
if (value > LXW_PATTERN_GRAY_0625) {
550+
LXW_WARN_FORMAT1("format_set_pattern(): invalid pattern value: %d",
551+
value);
552+
return;
553+
}
554+
549555
self->pattern = value;
550556
}
551557

@@ -689,6 +695,12 @@ format_set_diag_color(lxw_format *self, lxw_color_t color)
689695
void
690696
format_set_diag_border(lxw_format *self, uint8_t style)
691697
{
698+
if (style > LXW_BORDER_SLANT_DASH_DOT) {
699+
LXW_WARN_FORMAT1("format_set_diag_border(): invalid border style: %d",
700+
style);
701+
return;
702+
}
703+
692704
self->diag_border = style;
693705
}
694706

@@ -707,6 +719,13 @@ format_set_num_format_index(lxw_format *self, uint8_t value)
707719
void
708720
format_set_valign(lxw_format *self, uint8_t value)
709721
{
722+
if (value > LXW_ALIGN_VERTICAL_DISTRIBUTED) {
723+
LXW_WARN_FORMAT1
724+
("format_set_valign(): invalid vertical alignment value: %d",
725+
value);
726+
return;
727+
}
728+
710729
self->text_v_align = value;
711730
}
712731

src/worksheet.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9793,6 +9793,12 @@ worksheet_set_page_view(lxw_worksheet *self)
97939793
void
97949794
worksheet_set_paper(lxw_worksheet *self, uint8_t paper_size)
97959795
{
9796+
if (paper_size > 118) {
9797+
LXW_WARN_FORMAT1("worksheet_set_paper(): invalid paper size: %d. "
9798+
"Valid range is 0-118", paper_size);
9799+
return;
9800+
}
9801+
97969802
self->paper_size = paper_size;
97979803
self->page_setup_changed = LXW_TRUE;
97989804
}

0 commit comments

Comments
 (0)