diff --git gs/jbig2dec/jbig2_mmr.c gs/jbig2dec/jbig2_mmr.c
index 6bab96a..5d389d0 100644
--- gs/jbig2dec/jbig2_mmr.c
+++ gs/jbig2dec/jbig2_mmr.c
@@ -773,7 +773,7 @@ static const byte lm[8] = { 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 };
 static const byte rm[8] = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE };
 
 static void
-jbig2_set_bits(byte *line, int x0, int x1)
+jbig2_set_bits(byte *line, int x0, int x1, int limit)
 {
 	int a0, a1, b0, b1, a;
 
@@ -790,7 +790,7 @@ jbig2_set_bits(byte *line, int x0, int x1)
 		line[a0] |= lm[b0];
 		for (a = a0 + 1; a < a1; a++)
 			line[a] = 0xFF;
-		line[a1] |= rm[b1];
+		if (!((limit == x1) && (b1 == 0))) line[a1] |= rm[b1];
 	}
 }
 
@@ -862,7 +862,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 				a2 = a1 + black_run;
 				if (a1 > mmr->width) a1 = mmr->width;
 				if (a2 > mmr->width) a2 = mmr->width;
-				jbig2_set_bits(dst, a1, a2);
+				jbig2_set_bits(dst, a1, a2, mmr->width);
 				a0 = a2;
 				/* printf ("H %d %d\n", white_run, black_run); */
 			}
@@ -874,7 +874,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 				a2 = a1 + white_run;
 				if (a1 > mmr->width) a1 = mmr->width;
 				if (a2 > mmr->width) a2 = mmr->width;
-				jbig2_set_bits(dst, a0, a1);
+				jbig2_set_bits(dst, a0, a1, mmr->width);
 				a0 = a2;
 				/* printf ("H %d %d\n", black_run, white_run); */
 			}
@@ -886,7 +886,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 4);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			b2 = jbig2_find_changing_element(ref, b1, mmr->width);
-			if (c) jbig2_set_bits(dst, a0, b2);
+			if (c) jbig2_set_bits(dst, a0, b2, mmr->width);
 			a0 = b2;
 		}
 
@@ -895,7 +895,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			/* printf ("V(0)\n"); */
 			jbig2_decode_mmr_consume(mmr, 1);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
-			if (c) jbig2_set_bits(dst, a0, b1);
+			if (c) jbig2_set_bits(dst, a0, b1, mmr->width);
 			a0 = b1;
 			c = !c;
 		}
@@ -906,7 +906,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 3);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			if (b1 + 1 > mmr->width) break;
-			if (c) jbig2_set_bits(dst, a0, b1 + 1);
+			if (c) jbig2_set_bits(dst, a0, (b1 + 1), mmr->width);
 			a0 = b1 + 1;
 			c = !c;
 		}
@@ -917,7 +917,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 6);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			if (b1 + 2 > mmr->width) break;
-			if (c) jbig2_set_bits(dst, a0, b1 + 2);
+			if (c) jbig2_set_bits(dst, a0, (b1 + 2), mmr->width);
 			a0 = b1 + 2;
 			c = !c;
 		}
@@ -928,7 +928,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 7);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			if (b1 + 3 > mmr->width) break;
-			if (c) jbig2_set_bits(dst, a0, b1 + 3);
+			if (c) jbig2_set_bits(dst, a0, (b1 + 3), mmr->width);
 			a0 = b1 + 3;
 			c = !c;
 		}
@@ -939,7 +939,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 3);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			if (b1 - 1 < 0) break;
-			if (c) jbig2_set_bits(dst, a0, b1 - 1);
+			if (c) jbig2_set_bits(dst, a0, (b1 - 1), mmr->width);
 			a0 = b1 - 1;
 			c = !c;
 		}
@@ -950,7 +950,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 6);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			if (b1 - 2 < 0) break;
-			if (c) jbig2_set_bits(dst, a0, b1 - 2);
+			if (c) jbig2_set_bits(dst, a0, (b1 - 2), mmr->width);
 			a0 = b1 - 2;
 			c = !c;
 		}
@@ -961,7 +961,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
 			jbig2_decode_mmr_consume(mmr, 7);
 			b1 = jbig2_find_changing_element_of_color(ref, a0, mmr->width, !c);
 			if (b1 - 3 < 0) break;
-			if (c) jbig2_set_bits(dst, a0, b1 - 3);
+			if (c) jbig2_set_bits(dst, a0, (b1 - 3), mmr->width);
 			a0 = b1 - 3;
 			c = !c;
 		}
