From 0c57be06c42cba59285abc6724a3f5f6fd7d3f89 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Sat, 11 Jun 2011 23:40:29 +0000
Subject: [PATCH] fix

git-svn-id: http://svn.net-core.org/repos/t-engine4@3638 51575b47-30f0-44d4-a5cc-537603b46e54
---
 src/core_lua.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/core_lua.c b/src/core_lua.c
index 18adbb245f..8b49b9139d 100644
--- a/src/core_lua.c
+++ b/src/core_lua.c
@@ -486,7 +486,7 @@ static int sdl_surface_drawstring_newsurface_aa(lua_State *L)
 	return 1;
 }
 
-static font_make_texture_line(lua_State *L, SDL_Surface *s, int id, bool is_separator, int id_real_line, char *line_data)
+static font_make_texture_line(lua_State *L, SDL_Surface *s, int id, bool is_separator, int id_real_line, char *line_data, int line_data_size)
 {
 	lua_createtable(L, 0, 5);
 
@@ -522,7 +522,7 @@ static font_make_texture_line(lua_State *L, SDL_Surface *s, int id, bool is_sepa
 	if (line_data)
 	{
 		lua_pushliteral(L, "line_extra");
-		lua_pushstring(L, line_data);
+		lua_pushlstring(L, line_data, line_data_size);
 		lua_rawset(L, -3);
 	}
 
@@ -562,6 +562,7 @@ static int sdl_font_draw(lua_State *L)
 	int nb_lines = 1;
 	int id_real_line = 1;
 	char *line_data = NULL;
+	int line_data_size = 0;
 	char *start = (char*)str, *stop = (char*)str, *next = (char*)str;
 	int max_size = 0;
 	int size = 0;
@@ -593,7 +594,7 @@ static int sdl_font_draw(lua_State *L)
 			if (!no_linefeed && (force_nl || (txt && (size + txt->w > max_width))))
 			{
 				// Push it & reset the surface
-				font_make_texture_line(L, s, nb_lines, is_separator, id_real_line, line_data);
+				font_make_texture_line(L, s, nb_lines, is_separator, id_real_line, line_data, line_data_size);
 				is_separator = FALSE;
 				SDL_FillRect(s, NULL, SDL_MapRGBA(s->format, 0, 0, 0, 0));
 //				printf("Ending previous line at size %d\n", size);
@@ -603,7 +604,7 @@ static int sdl_font_draw(lua_State *L)
 				if (force_nl)
 				{
 					id_real_line++;
-					if (line_data) { free(line_data); line_data = NULL; }
+					if (line_data) { line_data = NULL; }
 				}
 				force_nl = FALSE;
 			}
@@ -657,8 +658,8 @@ static int sdl_font_draw(lua_State *L)
 				}
 				// Extra data
 				else if ((*(next+1) == '&')) {
-					if (line_data) { free(line_data); line_data = NULL; }
-					line_data = strndup(next + 2, codestop - (next+2));
+					line_data = next + 2;
+					line_data_size = codestop - (next+2);
 				}
 				// Color
 				else {
@@ -738,14 +739,12 @@ static int sdl_font_draw(lua_State *L)
 		next++;
 	}
 
-	font_make_texture_line(L, s, nb_lines, is_separator, id_real_line, line_data);
+	font_make_texture_line(L, s, nb_lines, is_separator, id_real_line, line_data, line_data_size);
 	if (size > max_size) max_size = size;
 
 	if (txt) SDL_FreeSurface(txt);
 	SDL_FreeSurface(s);
 
-	if (line_data) free(line_data);
-
 	lua_pushnumber(L, nb_lines);
 	lua_pushnumber(L, max_size);
 
-- 
GitLab