From 7db3e17a4aa5cd7e8b1b9e1e9e53495aafa169ca Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 2 Jan 2015 14:41:33 +0100 Subject: [PATCH] installer: Fix crash with small screen resolutions The installer is showing a help line at the bottom of the screen which is in some languages rather long. If it is longer than the width of the screen, the installer used to crash which is now fixed in this patch. --- src/installer/main.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index ab2cb8912e..c97776d248 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -216,19 +216,31 @@ static char* get_system_release() { } static char* center_string(const char* str, int width) { + if (!str) + return NULL; + + char* string = NULL; unsigned int str_len = strlen(str); - unsigned int indent_length = (width - str_len) / 2; - char indent[indent_length + 1]; + if (str_len == width) { + string = strdup(str); - for (unsigned int i = 0; i < indent_length; i++) { - indent[i] = ' '; - } - indent[indent_length] = '\0'; + } else if (str_len > width) { + string = strdup(str); + string[width - 1] = '\0'; - char* string = NULL; - if (asprintf(&string, "%s%s", indent, str) < 0) - return NULL; + } else { + unsigned int indent_length = (width - str_len) / 2; + char indent[indent_length + 1]; + + for (unsigned int i = 0; i < indent_length; i++) { + indent[i] = ' '; + } + indent[indent_length] = '\0'; + + if (asprintf(&string, "%s%s", indent, str) < 0) + return NULL; + } return string; } @@ -377,7 +389,8 @@ int main(int argc, char *argv[]) { // Draw title char* roottext = center_string(system_release, screen_cols); - newtDrawRootText(0, 0, roottext); + if (roottext) + newtDrawRootText(0, 0, roottext); snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN); @@ -423,7 +436,8 @@ int main(int argc, char *argv[]) { else helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); - newtPushHelpLine(helpline); + if (helpline) + newtPushHelpLine(helpline); if (!config.unattended) { snprintf(message, sizeof(message), -- 2.39.5