Part of #101079:

2005-11-17  Behdad Esfahbod  <behdad@gnome.org>

        Part of #101079:

        * pango/opentype/ftxopen.c (Load_Lookup): In extension subtables,
        offset is relative to the extension subtable, not the original
        table. (Greg Aumann)

        * pango/opentype/ftxgpos.c (Load_BaseArray): When reading BaseAnchor,
        skip offsets that are zero.  Works around bug in Doulos SIL Regular.
diff --git a/src/ftxgpos.c b/src/ftxgpos.c
index dee1729..3ebb302 100644
--- a/src/ftxgpos.c
+++ b/src/ftxgpos.c
@@ -2080,6 +2080,12 @@
 
         FORGET_Frame();
 
+	if (new_offset == base_offset) {
+	  /* Doulos SIL Regular is buggy and has zer offsets here.  Skip */
+	  ban[n].PosFormat = 0;
+	  continue;
+	}
+
         cur_offset = FILE_Pos();
         if ( FILE_Seek( new_offset ) ||
              ( error = Load_Anchor( &ban[n], stream ) ) != TT_Err_Ok )
diff --git a/src/ftxopen.c b/src/ftxopen.c
index 75f66be..c2f0485 100644
--- a/src/ftxopen.c
+++ b/src/ftxopen.c
@@ -631,9 +631,11 @@
         if ( FILE_Seek( new_offset ) || ACCESS_Frame( 8L ) )
           goto Fail;
 
-        (void)GET_UShort();                     /* format should be 1 */
+        if (GET_UShort() != 1) /* format should be 1 */
+	  goto Fail;
+
         l->LookupType = GET_UShort();
-        new_offset = GET_ULong() + base_offset;
+        new_offset += GET_ULong();
 
         FORGET_Frame();
       }