summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sample/chromium/subsetter_impl.cc5
-rw-r--r--sfntly/table/core/name_table.cc6
2 files changed, 8 insertions, 3 deletions
diff --git a/sample/chromium/subsetter_impl.cc b/sample/chromium/subsetter_impl.cc
index 3708f44..528e336 100644
--- a/sample/chromium/subsetter_impl.cc
+++ b/sample/chromium/subsetter_impl.cc
@@ -112,11 +112,14 @@ bool HasName(const char* font_name, Font* font) {
case NameId::kPreferredSubfamily:
case NameId::kWWSFamilyName:
case NameId::kWWSSubfamilyName: {
+ UChar* name_part = name_table->Name(i);
+ if (name_part == NULL) {
+ continue;
+ }
int32_t hash_code = HashCode(name_table->PlatformId(i),
name_table->EncodingId(i),
name_table->LanguageId(i),
name_table->NameId(i));
- UChar* name_part = name_table->Name(i);
ConstructName(name_part, &(names[hash_code]), name_table->NameId(i));
delete[] name_part;
break;
diff --git a/sfntly/table/core/name_table.cc b/sfntly/table/core/name_table.cc
index 5f6d5a5..8d2f64f 100644
--- a/sfntly/table/core/name_table.cc
+++ b/sfntly/table/core/name_table.cc
@@ -472,7 +472,9 @@ void NameTable::NameAsBytes(int32_t index, ByteVector* b) {
int32_t length = NameLength(index);
b->clear();
b->resize(length);
- data_->ReadBytes(NameOffset(index), &((*b)[0]), 0, length);
+ if (length > 0) {
+ data_->ReadBytes(NameOffset(index), &((*b)[0]), 0, length);
+ }
}
void NameTable::NameAsBytes(int32_t platform_id,
@@ -674,7 +676,7 @@ void NameTable::ConvertToNameBytes(const UChar* name,
UChar* NameTable::ConvertFromNameBytes(ByteVector* name_bytes,
int32_t platform_id,
int32_t encoding_id) {
- if (name_bytes == NULL) {
+ if (name_bytes == NULL || name_bytes->size() == 0) {
return NULL;
}
UConverter* cs = GetCharset(platform_id, encoding_id);