1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
--- parted-1.8.0/libparted/exception.c_orig 2006-12-11 19:44:23.000000000 +0000
+++ parted-1.8.0/libparted/exception.c 2006-12-11 19:47:53.000000000 +0000
@@ -231,6 +231,9 @@
PedExceptionOption ex_opts, const char* message, ...)
{
va_list arg_list;
+ int result;
+ static int size = 1000;
+
if (ex)
ped_exception_catch ();
@@ -239,16 +242,22 @@
if (!ex)
goto no_memory;
- ex->message = (char*) malloc (8192);
- if (!ex->message)
- goto no_memory;
-
ex->type = ex_type;
ex->options = ex_opts;
- va_start (arg_list, message);
- vsnprintf (ex->message, 8192, message, arg_list);
- va_end (arg_list);
+ while (1) {
+ ex->message = (char*) malloc (size);
+ if (!ex->message)
+ goto no_memory;
+ va_start (arg_list, message);
+ result = vsnprintf (ex->message, size, message, arg_list);
+ va_end (arg_list);
+
+ if (result > -1 && result < size)
+ break;
+ size += 10;
+ }
+
return do_throw ();
|