projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix up potential overflows in size calculations by replacing
[pspp]
/
src
/
ascii.c
diff --git
a/src/ascii.c
b/src/ascii.c
index 63aa4c1d82465fa96bc1a0c844c5664db755ea44..bd55d0efee9b94905dde4dec4715d7c8065f07c5 100644
(file)
--- a/
src/ascii.c
+++ b/
src/ascii.c
@@
-195,14
+195,14
@@
static struct outp_option_info *option_info;
static int
ascii_open_global (struct outp_class *this UNUSED)
{
static int
ascii_open_global (struct outp_class *this UNUSED)
{
- option_info = xmalloc (
sizeof (struct outp_option_info ) )
;
+ option_info = xmalloc (
sizeof *option_info)
;
option_info->initial = 0;
option_info->options = 0;
return 1;
}
option_info->initial = 0;
option_info->options = 0;
return 1;
}
-static
unsigned char *s=0
;
+static
char *s
;
static int
ascii_close_global (struct outp_class *this UNUSED)
{
static int
ascii_close_global (struct outp_class *this UNUSED)
{
@@
-231,7
+231,7
@@
ascii_preopen_driver (struct outp_driver *this)
assert (this->driver_open == 0);
msg (VM (1), _("ASCII driver initializing as `%s'..."), this->name);
assert (this->driver_open == 0);
msg (VM (1), _("ASCII driver initializing as `%s'..."), this->name);
- this->ext = x = xmalloc (sizeof
(struct ascii_driver_ext)
);
+ this->ext = x = xmalloc (sizeof
*x
);
x->char_set = CHS_ASCII;
x->headers = 1;
x->page_length = 66;
x->char_set = CHS_ASCII;
x->headers = 1;
x->page_length = 66;
@@
-716,7
+716,7
@@
ascii_open_page (struct outp_driver *this)
if (x->l > x->lines_cap)
{
if (x->l > x->lines_cap)
{
- x->lines = x
realloc (x->lines, sizeof *x->lines * x->l
);
+ x->lines = x
nrealloc (x->lines, x->l, sizeof *x->lines
);
for (i = x->lines_cap; i < x->l; i++)
{
struct line *line = &x->lines[i];
for (i = x->lines_cap; i < x->l; i++)
{
struct line *line = &x->lines[i];
@@
-746,8
+746,8
@@
expand_line (struct ascii_driver_ext *x, int i, int l)
if (l > line->char_cap)
{
line->char_cap = l * 2;
if (l > line->char_cap)
{
line->char_cap = l * 2;
- line->chars = xrealloc (line->chars,
-
line->char_cap *
sizeof *line->chars);
+ line->chars = x
n
realloc (line->chars,
+
line->char_cap,
sizeof *line->chars);
}
for (j = line->char_cnt; j < l; j++)
line->chars[j] = ' ';
}
for (j = line->char_cnt; j < l; j++)
line->chars[j] = ' ';
@@
-1158,8
+1158,8
@@
text_draw (struct outp_driver *this, struct outp_text *t)
/* ascii_close_page () and support routines. */
#define LINE_BUF_SIZE 1024
/* ascii_close_page () and support routines. */
#define LINE_BUF_SIZE 1024
-static
unsigned
char *line_buf;
-static
unsigned
char *line_p;
+static char *line_buf;
+static char *line_p;
static inline int
commit_line_buf (struct outp_driver *this)
static inline int
commit_line_buf (struct outp_driver *this)
@@
-1312,7
+1312,7
@@
output_shorts (struct outp_driver *this,
/* Writes CH into line_buf N times, or to THIS->output if line_buf
overflows. */
static inline void
/* Writes CH into line_buf N times, or to THIS->output if line_buf
overflows. */
static inline void
-output_char (struct outp_driver *this, int n,
int
ch)
+output_char (struct outp_driver *this, int n,
char
ch)
{
if (LINE_BUF_SIZE - (line_p - line_buf) >= n)
{
{
if (LINE_BUF_SIZE - (line_p - line_buf) >= n)
{
@@
-1474,7
+1474,7
@@
output_lines (struct outp_driver *this, int first, int count)
}
if (n_passes > 1)
{
}
if (n_passes > 1)
{
-
unsigned
char ch;
+ char ch;
return_carriage (this, n_chars);
n_chars = 0;
return_carriage (this, n_chars);
n_chars = 0;
@@
-1538,7
+1538,7
@@
ascii_close_page (struct outp_driver *this)
struct ascii_driver_ext *x = this->ext;
int nl_len, ff_len, total_len;
struct ascii_driver_ext *x = this->ext;
int nl_len, ff_len, total_len;
-
unsigned
char *cp;
+ char *cp;
int i;
assert (this->driver_open && this->page_open);
int i;
assert (this->driver_open && this->page_open);
@@
-1624,11
+1624,7
@@
ascii_close_page (struct outp_driver *this)
output_string (this, s, &s[total_len]);
if (line_p != line_buf && !commit_line_buf (this))
output_string (this, s, &s[total_len]);
if (line_p != line_buf && !commit_line_buf (this))
- {
- free(s);
- s=0;
return 0;
return 0;
- }
this->page_open = 0;
return 1;
this->page_open = 0;
return 1;