Procházet zdrojové kódy

Bug 53109: Correctly handle unicode strings in NameCommentRecord

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1682999 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_13_BETA1
Dominik Stadler před 9 roky
rodič
revize
f998d39515

+ 26
- 10
src/java/org/apache/poi/hssf/record/NameCommentRecord.java Zobrazit soubor

out.writeShort(field_4_name_length); out.writeShort(field_4_name_length);
out.writeShort(field_5_comment_length); out.writeShort(field_5_comment_length);


out.writeByte(0);
StringUtil.putCompressedUnicode(field_6_name_text, out);
out.writeByte(0);
StringUtil.putCompressedUnicode(field_7_comment_text, out);
boolean isNameMultiByte = StringUtil.hasMultibyte(field_6_name_text);
out.writeByte(isNameMultiByte ? 1 : 0);
if (isNameMultiByte) {
StringUtil.putUnicodeLE(field_6_name_text, out);
} else {
StringUtil.putCompressedUnicode(field_6_name_text, out);
}
boolean isCommentMultiByte = StringUtil.hasMultibyte(field_7_comment_text);
out.writeByte(isCommentMultiByte ? 1 : 0);
if (isCommentMultiByte) {
StringUtil.putUnicodeLE(field_7_comment_text, out);
} else {
StringUtil.putCompressedUnicode(field_7_comment_text, out);
}
} }


@Override @Override
protected int getDataSize() { protected int getDataSize() {
return 18 // 4 shorts + 1 long + 2 spurious 'nul's return 18 // 4 shorts + 1 long + 2 spurious 'nul's
+ field_6_name_text.length()
+ field_7_comment_text.length();
+ (StringUtil.hasMultibyte(field_6_name_text) ? field_6_name_text.length()*2 : field_6_name_text.length())
+ (StringUtil.hasMultibyte(field_7_comment_text) ? field_7_comment_text.length()*2 : field_7_comment_text.length());
} }


/** /**
final int field_4_name_length = in.readShort(); final int field_4_name_length = in.readShort();
final int field_5_comment_length = in.readShort(); final int field_5_comment_length = in.readShort();


in.readByte(); //spurious NUL
field_6_name_text = StringUtil.readCompressedUnicode(in, field_4_name_length);
in.readByte(); //spurious NUL
field_7_comment_text = StringUtil.readCompressedUnicode(in, field_5_comment_length);
if (in.readByte() == 0) {
field_6_name_text = StringUtil.readCompressedUnicode(in, field_4_name_length);
} else {
field_6_name_text = StringUtil.readUnicodeLE(in, field_4_name_length);
}
if (in.readByte() == 0) {
field_7_comment_text = StringUtil.readCompressedUnicode(in, field_5_comment_length);
} else {
field_7_comment_text = StringUtil.readUnicodeLE(in, field_5_comment_length);
}
} }


/** /**

+ 20
- 0
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Zobrazit soubor

} }
wb.close(); wb.close();
} }

@Test
public void test53109() throws IOException {
HSSFWorkbook wb = openSample("53109.xls");
Workbook wbBack = HSSFTestDataSamples.writeOutAndReadBack(wb);
assertNotNull(wbBack);
wb.close();
}
@Test
public void test53109a() throws IOException {
HSSFWorkbook wb = openSample("com.aida-tour.www_SPO_files_maldives%20august%20october.xls");
Workbook wbBack = HSSFTestDataSamples.writeOutAndReadBack(wb);
assertNotNull(wbBack);
wb.close();
}
} }

binární
test-data/spreadsheet/53109.xls Zobrazit soubor


binární
test-data/spreadsheet/com.aida-tour.www_SPO_files_maldives%20august%20october.xls Zobrazit soubor


Načítá se…
Zrušit
Uložit