From 84a30c031e3dd4117a7db00813bafc911164a06a Mon Sep 17 00:00:00 2001 From: Cristy Date: Sun, 9 Jun 2019 09:52:31 -0400 Subject: [PATCH] ... --- MagickCore/annotate.c | 45 ++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/MagickCore/annotate.c b/MagickCore/annotate.c index 8e7577f66..a1145780a 100644 --- a/MagickCore/annotate.c +++ b/MagickCore/annotate.c @@ -223,7 +223,9 @@ MagickExport MagickBooleanType AnnotateImage(Image *image, const DrawInfo *draw_info,ExceptionInfo *exception) { char + *p, primitive[MagickPathExtent], + *text, **textlist; DrawInfo @@ -245,9 +247,6 @@ MagickExport MagickBooleanType AnnotateImage(Image *image, register ssize_t i; - size_t - length; - TypeMetric metrics; @@ -265,16 +264,36 @@ MagickExport MagickBooleanType AnnotateImage(Image *image, return(MagickFalse); if (*draw_info->text == '\0') return(MagickTrue); - textlist=StringToList(draw_info->text); - if (textlist == (char **) NULL) - return(MagickFalse); - length=strlen(textlist[0]); - for (i=1; textlist[i] != (char *) NULL; i++) - if (strlen(textlist[i]) > length) - length=strlen(textlist[i]); - number_lines=(size_t) i; annotate=CloneDrawInfo((ImageInfo *) NULL,draw_info); + text=annotate->text; + annotate->text=(char *) NULL; annotate_info=CloneDrawInfo((ImageInfo *) NULL,draw_info); + number_lines=1; + for (p=text; *p != '\0'; p++) + if (*p == '\n') + number_lines++; + textlist=AcquireQuantumMemory(number_lines+1,sizeof(*textlist)); + if (textlist == (char **) NULL) + return(MagickFalse); + p=text; + for (i=0; i < number_lines; i++) + { + char + *q; + + textlist[i]=p; + for (q=p; *q != '\0'; q++) + if ((*q == '\r') || (*q == '\n')) + break; + if (*q == '\r') + { + *q='\0'; + q++; + } + *q='\0'; + p=q+1; + } + textlist[i]=(char *) NULL; SetGeometry(image,&geometry); SetGeometryInfo(&geometry_info); if (annotate_info->geometry != (char *) NULL) @@ -291,6 +310,8 @@ MagickExport MagickBooleanType AnnotateImage(Image *image, (void) memset(&metrics,0,sizeof(metrics)); for (i=0; textlist[i] != (char *) NULL; i++) { + if (*textlist[i] == '\0') + continue; /* Position text relative to image. */ @@ -498,8 +519,6 @@ MagickExport MagickBooleanType AnnotateImage(Image *image, */ annotate_info=DestroyDrawInfo(annotate_info); annotate=DestroyDrawInfo(annotate); - for (i=0; textlist[i] != (char *) NULL; i++) - textlist[i]=DestroyString(textlist[i]); textlist=(char **) RelinquishMagickMemory(textlist); return(status); } -- 2.40.0