]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/xfont.c (xfont_draw): Allocate the XChar2b array (Bug#35814)
authorAlexander Gramiak <agrambot@gmail.com>
Tue, 21 May 2019 20:58:59 +0000 (14:58 -0600)
committerAlexander Gramiak <agrambot@gmail.com>
Tue, 21 May 2019 21:11:23 +0000 (15:11 -0600)
src/xfont.c

index a402f77063033f07f14f2960b491ed55ad424e98..81808e7a62e4c8cb1e1b59ffc04f97e61b884ba8 100644 (file)
@@ -1047,11 +1047,16 @@ xfont_draw (struct glyph_string *s, int from, int to, int x, int y,
           }
       else
         {
-          const unsigned code = s->char2b[from];
-          const XChar2b char2b = { .byte1 = code >> 8,
-                                   .byte2 = code & 0xFF };
+          USE_SAFE_ALLOCA;
+          const unsigned *code = s->char2b + from;
+          XChar2b *char2b;
+          SAFE_NALLOCA (char2b, 1, len);
+          for (int i = 0; i < len; ++i)
+            char2b[i] = (XChar2b) { .byte1 = code[i] >> 8,
+                                    .byte2 = code[i] & 0xFF };
           XDrawImageString16 (display, FRAME_X_DRAWABLE (s->f),
-                              gc, x, y, &char2b, len);
+                              gc, x, y, char2b, len);
+          SAFE_FREE ();
         }
     }
   else
@@ -1067,11 +1072,16 @@ xfont_draw (struct glyph_string *s, int from, int to, int x, int y,
           }
       else
         {
-          const unsigned code = s->char2b[from];
-          const XChar2b char2b = { .byte1 = code >> 8,
-                                   .byte2 = code & 0xFF };
+          USE_SAFE_ALLOCA;
+          const unsigned *code = s->char2b + from;
+          XChar2b *char2b;
+          SAFE_NALLOCA (char2b, 1, len);
+          for (int i = 0; i < len; ++i)
+            char2b[i] = (XChar2b) { .byte1 = code[i] >> 8,
+                                    .byte2 = code[i] & 0xFF };
           XDrawString16 (display, FRAME_X_DRAWABLE (s->f),
-                         gc, x, y, &char2b, len);
+                         gc, x, y, char2b, len);
+          SAFE_FREE ();
         }
     }
   unblock_input ();