mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
e538572bea
commit
f998d39515
|
@ -62,17 +62,27 @@ public final class NameCommentRecord extends StandardRecord {
|
||||||
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);
|
boolean isNameMultiByte = StringUtil.hasMultibyte(field_6_name_text);
|
||||||
StringUtil.putCompressedUnicode(field_6_name_text, out);
|
out.writeByte(isNameMultiByte ? 1 : 0);
|
||||||
out.writeByte(0);
|
if (isNameMultiByte) {
|
||||||
StringUtil.putCompressedUnicode(field_7_comment_text, out);
|
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()
|
+ (StringUtil.hasMultibyte(field_6_name_text) ? field_6_name_text.length()*2 : field_6_name_text.length())
|
||||||
+ field_7_comment_text.length();
|
+ (StringUtil.hasMultibyte(field_7_comment_text) ? field_7_comment_text.length()*2 : field_7_comment_text.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,10 +96,16 @@ public final class NameCommentRecord extends StandardRecord {
|
||||||
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
|
if (in.readByte() == 0) {
|
||||||
field_6_name_text = StringUtil.readCompressedUnicode(in, field_4_name_length);
|
field_6_name_text = StringUtil.readCompressedUnicode(in, field_4_name_length);
|
||||||
in.readByte(); //spurious NUL
|
} else {
|
||||||
field_7_comment_text = StringUtil.readCompressedUnicode(in, field_5_comment_length);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2738,4 +2738,24 @@ public final class TestBugs extends BaseTestBugzillaIssues {
|
||||||
}
|
}
|
||||||
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue