Fix bug with field numbers >255 (#407)

When using descriptor width of 2 (default for tag numbers between
64 and 1023), bit 8 of the tag number got accidentally cleared.
diff --git a/pb.h b/pb.h
index 8bf00e3..b0f895d 100644
--- a/pb.h
+++ b/pb.h
@@ -674,7 +674,7 @@
 
 #define PB_FIELDINFO_2(tag, type, data_offset, data_size, size_offset, array_size) \
     (1 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(array_size) & 0xFFF) << 16) | (((uint32_t)(size_offset) & 0x0F) << 28)), \
-    (((uint32_t)(data_offset) & 0xFFFF) | (((uint32_t)(data_size) & 0xFFF) << 16) | (((uint32_t)(tag) & 0x2c0) << 22)),
+    (((uint32_t)(data_offset) & 0xFFFF) | (((uint32_t)(data_size) & 0xFFF) << 16) | (((uint32_t)(tag) & 0x3c0) << 22)),
 
 #define PB_FIELDINFO_4(tag, type, data_offset, data_size, size_offset, array_size) \
     (2 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(array_size) & 0xFFFF) << 16)), \
diff --git a/tests/alltypes/alltypes.proto b/tests/alltypes/alltypes.proto
index 2377180..303ec63 100644
--- a/tests/alltypes/alltypes.proto
+++ b/tests/alltypes/alltypes.proto
@@ -117,7 +117,7 @@
 
     // Just to make sure that the size of the fields has been calculated
     // properly, i.e. otherwise a bug in last field might not be detected.
-    required int32      end = 99;
+    required int32      end = 999;
 
 
     extensions 200 to 255;
diff --git a/tests/alltypes_proto3/alltypes.proto b/tests/alltypes_proto3/alltypes.proto
index f66109e..a0fdde5 100644
--- a/tests/alltypes_proto3/alltypes.proto
+++ b/tests/alltypes_proto3/alltypes.proto
@@ -95,6 +95,6 @@
 
     // Just to make sure that the size of the fields has been calculated
     // properly, i.e. otherwise a bug in last field might not be detected.
-    int32      end = 99;
+    int32      end = 999;
 }
 
diff --git a/tests/regression/issue_407/test_extensions.c b/tests/regression/issue_407/test_extensions.c
index 8c62cf9..e73ddb6 100644
--- a/tests/regression/issue_407/test_extensions.c
+++ b/tests/regression/issue_407/test_extensions.c
@@ -30,6 +30,15 @@
         TEST(pb_encode(&stream, SimpleMessage_fields, &msg));
         msglen = stream.bytes_written;
         TEST(msglen == 9); /* 3 for number, 3 for submsg tag+len, 3 for second_number */
+        TEST(buffer[0] == 0x08); /* varint 1 */
+        TEST(buffer[1] == 0xD2); /* number = 1234 */
+        TEST(buffer[2] == 0x09);
+        TEST(buffer[3] == 0xE2); /* submsg 1100 */
+        TEST(buffer[4] == 0x44);
+        TEST(buffer[5] == 0x03); /* length 3 */
+        TEST(buffer[6] == 0x08); /* varint 1 */
+        TEST(buffer[7] == 0xae); /* second_number = 5678 */
+        TEST(buffer[8] == 0x2c);
     }
 
     {