diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/MiscNodes.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/MiscNodes.java
index 2c5d6f3ec058e5178e5e63d8f91816cf2d1503e1..1c6562db6396bdce9c7600220ce3fcbee4ee6afd 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/MiscNodes.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/MiscNodes.java
@@ -279,7 +279,7 @@ public final class MiscNodes {
         }
 
         protected CastNode createCast() {
-            HeadPhaseBuilder<Double> findFirst = CastNodeBuilder.newCastBuilder().mustNotBeMissing().mustNotBeNull().asDoubleVector().findFirst();
+            HeadPhaseBuilder<Double> findFirst = CastNodeBuilder.newCastBuilder().mustNotBeMissing().allowNull().asDoubleVector().findFirst();
             return findFirst.buildCastNode();
         }
 
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/OctSizeNode.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/OctSizeNode.java
index 4f334e8429025605af36085c1c612b14bfaa1b9b..77e95ccbfc41519f21bcabc655ff432b7177f27d 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/OctSizeNode.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/OctSizeNode.java
@@ -13,7 +13,7 @@ public abstract class OctSizeNode extends RExternalBuiltinNode.Arg1 {
 
     static {
         Casts casts = new Casts(OctSizeNode.class);
-        casts.arg(0).mustNotBeMissing().mustNotBeNull().returnIf(Predef.integerValue()).asDoubleVector().findFirst();
+        casts.arg(0).mustNotBeMissing().allowNull().returnIf(Predef.integerValue()).asDoubleVector().findFirst();
     }
 
     @Child private SizeToOctalRawNode sizeToOctal = SizeToOctalRawNode.create();
diff --git a/com.oracle.truffle.r.native/version.source b/com.oracle.truffle.r.native/version.source
index c739b42c4d2ce23786c5350641d0adbf5fa7d6b2..ea90ee31980757b2e469741512bcb39e73494e78 100644
--- a/com.oracle.truffle.r.native/version.source
+++ b/com.oracle.truffle.r.native/version.source
@@ -1 +1 @@
-44
+45
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/SizeToOctalRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/SizeToOctalRawNode.java
index f63915dbfb7b1fbf393ed987f03215351d1b18d4..c0bdbc429e9333ac514f7345b0ad1db504304d71 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/SizeToOctalRawNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/SizeToOctalRawNode.java
@@ -10,6 +10,7 @@ import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
+import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RRawVector;
 import com.oracle.truffle.r.runtime.data.nodes.SetDataAt;
 
@@ -31,9 +32,12 @@ public abstract class SizeToOctalRawNode extends UnaryNode {
         }
 
         ByteBuffer encode = asciiCharset.encode(Integer.toOctalString(s));
+        // reverse
         byte[] result = new byte[11];
-        Arrays.fill(result, (byte) 48);
-        encode.get(result);
+        Arrays.fill(result, (byte) '0');
+        for (int i = result.length - 1; i >= 0 && encode.hasRemaining(); i--) {
+            result[i] = encode.get();
+        }
         return result;
     }
 
@@ -59,6 +63,11 @@ public abstract class SizeToOctalRawNode extends UnaryNode {
         return ans;
     }
 
+    @Specialization
+    protected RRawVector octSize(@SuppressWarnings("unused") RNull n) {
+        return RDataFactory.createRawVector(11);
+    }
+
     public static SizeToOctalRawNode create() {
         return SizeToOctalRawNodeGen.create();
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index ea87c1d8a9dd1e748c740c7f03404657d9b8f092..ad916edb9adb8c64acc26c21ac056b73a3d771eb 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -167456,6 +167456,26 @@ Error: the first argument must be of mode character
 [28] plot.ts             plot.tskernel*
 see '?methods' for accessing help and source code
 
+##com.oracle.truffle.r.test.library.utils.TestUtils.testOctSize#
+#.Call(utils:::C_octsize, 1.0)
+ [1] 30 30 30 30 30 30 30 30 30 30 31
+
+##com.oracle.truffle.r.test.library.utils.TestUtils.testOctSize#
+#.Call(utils:::C_octsize, 1L)
+ [1] 30 30 30 30 30 30 30 30 30 30 31
+
+##com.oracle.truffle.r.test.library.utils.TestUtils.testOctSize#
+#.Call(utils:::C_octsize, 2147483647)
+ [1] 31 37 37 37 37 37 37 37 37 37 37
+
+##com.oracle.truffle.r.test.library.utils.TestUtils.testOctSize#
+#.Call(utils:::C_octsize, NA)
+ [1] 00 00 00 00 00 00 00 00 00 00 00
+
+##com.oracle.truffle.r.test.library.utils.TestUtils.testOctSize#
+#.Call(utils:::C_octsize, NULL)
+ [1] 00 00 00 00 00 00 00 00 00 00 00
+
 ##com.oracle.truffle.r.test.library.utils.TestWriteTable.testTable#
 #write.table(data.frame(col=c(1,2,3,4), col2=c(T, F, T, F)))
 "col" "col2"
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java
index dd5c91b83e5207424a600e916f5e3a96a4baeefc..9153421fab121f4303dbb47072995541e188e8bd 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java
@@ -44,4 +44,11 @@ public class TestUtils extends TestBase {
         // The vector of methods is not sorted alphabetically
         assertEval(Ignored.ImplementationError, "methods(plot)");
     }
+
+    private static final String[] TEST_OCTSIZE_PARAMS = {"1L", "1.0", Integer.toString(Integer.MAX_VALUE), "NA", "NULL"};
+
+    @Test
+    public void testOctSize() {
+        assertEval(template(".Call(utils:::C_octsize, %0)", TEST_OCTSIZE_PARAMS));
+    }
 }