Index: third_party/harfbuzz/chromium.patch |
diff --git a/third_party/harfbuzz/chromium.patch b/third_party/harfbuzz/chromium.patch |
index 0705356d20e8aff8d916364f14060e0ae2177bed..2923e6e610be87587204f8fba5eb81a495b0c20a 100644 |
--- a/third_party/harfbuzz/chromium.patch |
+++ b/third_party/harfbuzz/chromium.patch |
@@ -14,8 +14,22 @@ index 51dd4ea..cb7a85b 100644 |
continue; |
} else { |
*iter = prev_iter; |
+diff --git a/src/harfbuzz-gpos.c b/src/harfbuzz-gpos.c |
+index 356dc01..db5ea0a 100644 |
+--- a/src/harfbuzz-gpos.c |
++++ b/src/harfbuzz-gpos.c |
+@@ -2976,6 +2976,9 @@ static HB_Error Lookup_MarkMarkPos( GPOS_Instance* gpi, |
+ j--; |
+ } |
+ |
++ if ( i > buffer->in_pos ) |
++ return HB_Err_Not_Covered; |
++ |
+ error = _HB_OPEN_Coverage_Index( &mmp->Mark2Coverage, IN_GLYPH( j ), |
+ &mark2_index ); |
+ if ( error ) |
diff --git a/src/harfbuzz-shaper.cpp b/src/harfbuzz-shaper.cpp |
-index f3ec8e1..2b0dfde 100644 |
+index f3ec8e1..2b52221 100644 |
--- a/src/harfbuzz-shaper.cpp |
+++ b/src/harfbuzz-shaper.cpp |
@@ -433,7 +433,7 @@ void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) |
@@ -35,17 +49,16 @@ index f3ec8e1..2b0dfde 100644 |
// first char in a run is never (treated as) a mark |
int cStart = 0; |
-diff --git a/src/harfbuzz-gpos.c b/src/harfbuzz-gpos.c |
-index 356dc01..db5ea0a 100644 |
---- a/src/harfbuzz-gpos.c |
-+++ b/src/harfbuzz-gpos.c |
-@@ -2976,6 +2976,9 @@ static HB_Error Lookup_MarkMarkPos( GPOS_Instance* gpi, |
- j--; |
- } |
+@@ -1151,10 +1150,11 @@ HB_Bool HB_OpenTypeShape(HB_ShaperItem *item, const hb_uint32 *properties) |
+ return false; |
+ face->tmpLogClusters = tmpLogClusters; |
-+ if ( i > buffer->in_pos ) |
-+ return HB_Err_Not_Covered; |
-+ |
- error = _HB_OPEN_Coverage_Index( &mmp->Mark2Coverage, IN_GLYPH( j ), |
- &mark2_index ); |
- if ( error ) |
++ const int itemLength = item->item.length; |
+ for (int i = 0; i < face->length; ++i) { |
+ hb_buffer_add_glyph(face->buffer, item->glyphs[i], properties ? properties[i] : 0, i); |
+ face->tmpAttributes[i] = item->attributes[i]; |
+- face->tmpLogClusters[i] = item->log_clusters[i]; |
++ face->tmpLogClusters[i] = i < itemLength ? item->log_clusters[i] : item->log_clusters[itemLength - 1]; |
+ } |
+ |
+ #ifdef OT_DEBUG |