git://git.nikiroo.be
/
fanfix.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
allow getMetas without synchronized
[fanfix.git]
/
src
/
jexer
/
tterminal
/
Sixel.java
diff --git
a/src/jexer/tterminal/Sixel.java
b/src/jexer/tterminal/Sixel.java
index 8e363ef125c6830f2ad759aefff42a4a56179db2..b91e77a98beebc8cdfc726426654fd07c1b43967 100644
(file)
--- a/
src/jexer/tterminal/Sixel.java
+++ b/
src/jexer/tterminal/Sixel.java
@@
-31,7
+31,6
@@
package jexer.tterminal;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
-import java.util.ArrayList;
import java.util.HashMap;
/**
import java.util.HashMap;
/**
@@
-72,6
+71,16
@@
public class Sixel {
*/
private static int HEIGHT_INCREASE = 400;
*/
private static int HEIGHT_INCREASE = 400;
+ /**
+ * Maximum width in pixels.
+ */
+ private static int MAX_WIDTH = 1000;
+
+ /**
+ * Maximum height in pixels.
+ */
+ private static int MAX_HEIGHT = 1000;
+
/**
* Current scanning state.
*/
/**
* Current scanning state.
*/
@@
-142,6
+151,11
@@
public class Sixel {
*/
private Color color = Color.BLACK;
*/
private Color color = Color.BLACK;
+ /**
+ * If set, abort processing this image.
+ */
+ private boolean abort = false;
+
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
// ------------------------------------------------------------------------
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
// ------------------------------------------------------------------------
@@
-150,12
+164,14
@@
public class Sixel {
* Public constructor.
*
* @param buffer the sixel data to parse
* Public constructor.
*
* @param buffer the sixel data to parse
+ * @param palette palette to use, or null for a private palette
*/
*/
- public Sixel(final String buffer) {
+ public Sixel(final String buffer
, final HashMap<Integer, Color> palette
) {
this.buffer = buffer;
this.buffer = buffer;
- palette = new HashMap<Integer, Color>();
- for (int i = 0; i < buffer.length(); i++) {
- consume(buffer.charAt(i));
+ if (palette == null) {
+ this.palette = new HashMap<Integer, Color>();
+ } else {
+ this.palette = palette;
}
}
}
}
@@
-169,6
+185,16
@@
public class Sixel {
* @return the sixel data as an image.
*/
public BufferedImage getImage() {
* @return the sixel data as an image.
*/
public BufferedImage getImage() {
+ if (buffer != null) {
+ for (int i = 0; (i < buffer.length()) && (abort == false); i++) {
+ consume(buffer.charAt(i));
+ }
+ buffer = null;
+ }
+ if (abort == true) {
+ return null;
+ }
+
if ((width > 0) && (height > 0) && (image != null)) {
/*
System.err.println(String.format("%d %d %d %d", width, y + 1,
if ((width > 0) && (height > 0) && (image != null)) {
/*
System.err.println(String.format("%d %d %d %d", width, y + 1,
@@
-300,6
+326,9
@@
public class Sixel {
if (x > width) {
width = x;
}
if (x > width) {
width = x;
}
+ if (width > MAX_WIDTH) {
+ abort = true;
+ }
return;
}
return;
}
@@
-337,6
+366,12
@@
public class Sixel {
if (x > width) {
width = x;
}
if (x > width) {
width = x;
}
+ if (width > MAX_WIDTH) {
+ abort = true;
+ }
+ if (y + 1 > MAX_HEIGHT) {
+ abort = true;
+ }
}
/**
}
/**
@@
-393,7
+428,13
@@
public class Sixel {
if ((pan == pad) && (pah > 0) && (pav > 0)) {
rasterWidth = pah;
rasterHeight = pav;
if ((pan == pad) && (pah > 0) && (pav > 0)) {
rasterWidth = pah;
rasterHeight = pav;
- resizeImage(rasterWidth, rasterHeight);
+ if ((rasterWidth <= MAX_WIDTH) && (rasterHeight <= MAX_HEIGHT)) {
+ resizeImage(rasterWidth, rasterHeight);
+ } else {
+ abort = true;
+ }
+ } else {
+ abort = true;
}
}
}
}
@@
-532,10
+573,10
@@
public class Sixel {
case REPEAT:
if ((ch >= '0') && (ch <= '9')) {
if (repeatCount == -1) {
case REPEAT:
if ((ch >= '0') && (ch <= '9')) {
if (repeatCount == -1) {
- repeatCount = (
int) (
ch - '0');
+ repeatCount = (ch - '0');
} else {
repeatCount *= 10;
} else {
repeatCount *= 10;
- repeatCount += (
int) (
ch - '0');
+ repeatCount += (ch - '0');
}
}
return;
}
}
return;