Fixed wrong use of _alloca which causes crashes on Windows

This commit is contained in:
Harald Oehlmann 2015-08-18 14:27:37 +02:00
parent 93fa54a784
commit b948d9928c

View File

@ -81,11 +81,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
int upceanflag = 0; int upceanflag = 0;
// Allocate memory for the rendered version // Allocate memory for the rendered version
#ifndef _MSC_VER render = symbol->rendered = (struct zint_render *) malloc(sizeof(struct zint_render));
render = symbol->rendered = malloc(sizeof(struct zint_render));
#else
render = symbol->rendered = (struct zint_render *)_alloca(sizeof(struct zint_render));
#endif
render->lines = NULL; render->lines = NULL;
render->strings = NULL; render->strings = NULL;
render->rings = NULL; render->rings = NULL;
@ -101,7 +97,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
symbol_lead_in = 0; symbol_lead_in = 0;
addon_text_posn = 0.0; addon_text_posn = 0.0;
addon_width_x = 0; addon_width_x = 0;
/* /*
* Determine if there will be any addon texts and text height * Determine if there will be any addon texts and text height
*/ */
@ -474,7 +470,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
} }
} }
if(upceanflag == 13) { if(upceanflag == 13) {
/* guard bar extensions and text formatting for EAN-13 */ /* guard bar extensions and text formatting for EAN-13 */
i = 0; i = 0;
@ -566,7 +562,7 @@ int render_plot(struct zint_symbol *symbol, float width, float height)
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string);
textpart[0] = symbol->text[11]; textpart[0] = symbol->text[11];
textpart[1] = '\0'; textpart[1] = '\0';
textpos = 100; textpos = 100;
textwidth = 6.2; textwidth = 6.2;
render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string); render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string);
textdone = 1; textdone = 1;
@ -686,11 +682,7 @@ struct zint_render_line *render_plot_create_line(float x, float y, float width,
{ {
struct zint_render_line *line; struct zint_render_line *line;
#ifndef _MSC_VER line = (struct zint_render_line*) malloc(sizeof(struct zint_render_line));
line = malloc(sizeof(struct zint_render_line));
#else
line = (struct zint_render_line *)_alloca(sizeof(struct zint_render_line));
#endif
line->next = NULL; line->next = NULL;
line->x = x; line->x = x;
line->y = y; line->y = y;
@ -719,11 +711,7 @@ struct zint_render_ring *render_plot_create_ring(float x, float y, float radius,
{ {
struct zint_render_ring *ring; struct zint_render_ring *ring;
#ifndef _MSC_VER ring = (struct zint_render_ring *) malloc(sizeof(struct zint_render_ring));
ring = malloc(sizeof(struct zint_render_ring));
#else
ring = (struct zint_render_ring *)_alloca(sizeof(struct zint_render_ring));
#endif
ring->next = NULL; ring->next = NULL;
ring->x = x; ring->x = x;
ring->y = y; ring->y = y;
@ -748,11 +736,7 @@ struct zint_render_hexagon *render_plot_create_hexagon(float x, float y)
{ {
struct zint_render_hexagon *hexagon; struct zint_render_hexagon *hexagon;
#ifndef _MSC_VER hexagon = (struct zint_render_hexagon*) malloc(sizeof(struct zint_render_hexagon));
hexagon = malloc(sizeof(struct zint_render_hexagon));
#else
hexagon = (struct zint_render_hexagon *)_alloca(sizeof(struct zint_render_hexagon));
#endif
hexagon->next = NULL; hexagon->next = NULL;
hexagon->x = x; hexagon->x = x;
hexagon->y = y; hexagon->y = y;
@ -781,22 +765,14 @@ int render_plot_add_string(struct zint_symbol *symbol,
{ {
struct zint_render_string *string; struct zint_render_string *string;
#ifndef _MSC_VER string = (struct zint_render_string*) malloc(sizeof(struct zint_render_string));
string = malloc(sizeof(struct zint_render_string));
#else
string = (struct zint_render_string *)_alloca(sizeof(struct zint_render_string));
#endif
string->next = NULL; string->next = NULL;
string->x = x; string->x = x;
string->y = y; string->y = y;
string->width = width; string->width = width;
string->fsize = fsize; string->fsize = fsize;
string->length = ustrlen(text); string->length = ustrlen(text);
#ifndef _MSC_VER string->text = (unsigned char*) malloc(sizeof(unsigned char) * (ustrlen(text) + 1));
string->text = malloc(sizeof(unsigned char) * (ustrlen(text) + 1));
#else
string->text = (unsigned char *)_alloca((ustrlen(text) + 1) * sizeof(unsigned char));
#endif
ustrcpy(string->text, text); ustrcpy(string->text, text);
if (*last_string) if (*last_string)