1diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c 2--- a/gfx/cairo/cairo/src/cairo-quartz-surface.c 3+++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c 4@@ -2573,29 +2573,43 @@ static cairo_int_status_t 5 6 if (style->dash && style->num_dashes) { 7 #define STATIC_DASH 32 8 cairo_quartz_float_t sdash[STATIC_DASH]; 9 cairo_quartz_float_t *fdash = sdash; 10 unsigned int max_dashes = style->num_dashes; 11 unsigned int k; 12 13- if (style->num_dashes%2) 14- max_dashes *= 2; 15- if (max_dashes > STATIC_DASH) 16- fdash = _cairo_malloc_ab (max_dashes, sizeof (cairo_quartz_float_t)); 17- if (fdash == NULL) 18- return _cairo_error (CAIRO_STATUS_NO_MEMORY); 19- 20- for (k = 0; k < max_dashes; k++) 21- fdash[k] = (cairo_quartz_float_t) style->dash[k % style->num_dashes]; 22- 23- CGContextSetLineDash (surface->cgContext, style->dash_offset, fdash, max_dashes); 24- if (fdash != sdash) 25- free (fdash); 26+ bool set_line_dash = false; 27+ if (style->num_dashes % 2 == 0) { 28+ for (k = 1; k < max_dashes; k++) { 29+ if (style->dash[k]) { 30+ set_line_dash = true; 31+ break; 32+ } 33+ } 34+ } else 35+ set_line_dash = true; 36+ 37+ if (set_line_dash) { 38+ if (style->num_dashes%2) 39+ max_dashes *= 2; 40+ if (max_dashes > STATIC_DASH) 41+ fdash = _cairo_malloc_ab (max_dashes, sizeof (cairo_quartz_float_t)); 42+ if (fdash == NULL) 43+ return _cairo_error (CAIRO_STATUS_NO_MEMORY); 44+ 45+ for (k = 0; k < max_dashes; k++) 46+ fdash[k] = (cairo_quartz_float_t) style->dash[k % style->num_dashes]; 47+ 48+ CGContextSetLineDash (surface->cgContext, style->dash_offset, fdash, max_dashes); 49+ if (fdash != sdash) 50+ free (fdash); 51+ } else 52+ CGContextSetLineDash (state.context, 0, NULL, 0); 53 } else 54 CGContextSetLineDash (state.context, 0, NULL, 0); 55 56 57 _cairo_quartz_cairo_path_to_quartz_context (path, state.context); 58 59 _cairo_quartz_cairo_matrix_to_quartz (ctm, &strokeTransform); 60 CGContextConcatCTM (state.context, strokeTransform); 61