Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42fb01f8 authored by Danny Baumann's avatar Danny Baumann Committed by Gerrit Code Review
Browse files

Merge "Fix crash of gallery on showing details" into cm-11.0

parents c76ae2ad d2736c84
Loading
Loading
Loading
Loading
+23 −10
Original line number Diff line number Diff line
@@ -314,10 +314,14 @@ public class ExifTag {
     * Sets a string value into this tag. This method should be used for tags of
     * type {@link #TYPE_ASCII}. The string is converted to an ASCII string.
     * Characters that cannot be converted are replaced with '?'. The length of
     * the string must be equal to either (component count -1) or (component
     * count). The final byte will be set to the string null terminator '\0',
     * overwriting the last character in the string if the value.length is equal
     * to the component count. This method will fail if:
     * the string must be equal to either
     * <ul>
     * <li>component count - 1 when the terminating '\0' is not present</li>
     * <li>component count when the terminating '\0' is present</li>
     * <li>to comply with some non-conformant implementations, the terminating
     * '\0' will be appended if it's not present and component count equals
     * the string length; the component count will be updated in that case</li>
     * This method will fail if:
     * <ul>
     * <li>The data type is not {@link #TYPE_ASCII} or {@link #TYPE_UNDEFINED}.</li>
     * <li>The length of the string is not equal to (component count - 1) or
@@ -331,12 +335,21 @@ public class ExifTag {

        byte[] buf = value.getBytes(US_ASCII);
        byte[] finalBuf = buf;
        if (mDataType == TYPE_ASCII) {
            if (buf.length > 0) {
            finalBuf = (buf[buf.length - 1] == 0 || mDataType == TYPE_UNDEFINED) ? buf : Arrays
                .copyOf(buf, buf.length + 1);
        } else if (mDataType == TYPE_ASCII && mComponentCountActual == 1) {
                if (buf[buf.length - 1] != 0) {
                    finalBuf = Arrays.copyOf(buf, buf.length + 1);
                    // Apply the workaround for non conformant implementations
                    // (e.g. Samsung Wave 2): Accept a string with missing
                    // termination character
                    if (mComponentCountActual == buf.length) {
                        mComponentCountActual++;
                    }
                }
            } else if (mComponentCountActual == 1) {
                finalBuf = new byte[] { 0 };
            }
        }
        int count = finalBuf.length;
        if (checkBadComponentCount(count)) {
            return false;