diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 4c01502c0da99396fdbb0bdeb1e50967a073d4d4..7ee06523ab51d87c2bf0fbb27cdfa0a4f934be10 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -587,6 +587,9 @@ class OneOf(Field):
         self.name = oneof_desc.name
         self.ctype = 'union'
         self.fields = []
+        self.allocation = 'ONEOF'
+        self.default = None
+        self.rules = 'ONEOF'
 
     def add_field(self, field):
         if field.allocation == 'CALLBACK':
diff --git a/tests/options/options.proto b/tests/options/options.proto
index a8e557bea3cd1bbddec8f682373bf135443e9091..cdcffeb721acb73607a3adc5a46308916cbb3718 100644
--- a/tests/options/options.proto
+++ b/tests/options/options.proto
@@ -75,3 +75,12 @@ message SkippedMessage
     option (nanopb_msgopt).skip_message = true;
     required int32 foo = 1;
 }
+
+// Message with oneof field
+message OneofMessage
+{
+    oneof foo {
+        int32 bar = 1;
+    }
+}
+