X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsys-file-reader.c;h=48a5188fb65fe39586804774c6e1f96b09ea0a92;hb=78b2280e4d75fc07ce0f17c3607c0707f7ccb819;hp=d2b105c0255ea7da523463f7c7caa232950f63c6;hpb=a21231bcd08705522d4a4674e34fb87dd1c1bac8;p=pspp diff --git a/src/data/sys-file-reader.c b/src/data/sys-file-reader.c index d2b105c025..48a5188fb6 100644 --- a/src/data/sys-file-reader.c +++ b/src/data/sys-file-reader.c @@ -614,16 +614,20 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict, sys_error (r, _("Variable label indicator field is not 0 or 1.")); if (has_variable_label == 1) { - size_t len; + size_t len, read_len; char label[255 + 1]; len = read_int (r); - if (len >= sizeof label) - sys_error (r, _("Variable %s has label of invalid length %zu."), - name, len); - read_string (r, label, len + 1); + + /* Read up to 255 bytes of label. */ + read_len = MIN (sizeof label - 1, len); + read_string (r, label, read_len + 1); var_set_label (var, label); + /* Skip unread label bytes. */ + skip_bytes (r, len - read_len); + + /* Skip label padding up to multiple of 4 bytes. */ skip_bytes (r, ROUND_UP (len, 4) - len); }