From edaf5456bfd5c148e273a12007c8cc1165ca4d0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sat, 17 Jan 1998 18:58:14 +0100
Subject: [PATCH] Stdio.read_file() and Stdio.read_bytes() now only allow
 regular files.

Rev: lib/modules/Stdio.pmod:1.7
---
 lib/modules/Stdio.pmod | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/lib/modules/Stdio.pmod b/lib/modules/Stdio.pmod
index c972fa8a8c..e10525f887 100644
--- a/lib/modules/Stdio.pmod
+++ b/lib/modules/Stdio.pmod
@@ -155,6 +155,15 @@ string read_file(string filename,void|int start,void|int len)
   f=FILE();
   if(!f->open(filename,"r")) return 0;
 
+  // Disallow devices and directories.
+  array st;
+  if (f->stat && (st = f->stat()) && (st[1] < 0)) {
+    throw(({ sprintf("Stdio.read_file(): File \"%s\" is not a regular file!\n",
+		     filename),
+	     backtrace()
+    }));
+  }
+
   switch(query_num_arg())
   {
   case 1:
@@ -187,6 +196,15 @@ string read_bytes(string filename,void|int start,void|int len)
   if(!f->open(filename,"r"))
     return 0;
   
+  // Disallow devices and directories.
+  array st;
+  if (f->stat && (st = f->stat()) && (st[1] < 0)) {
+    throw(({sprintf("Stdio.read_bytes(): File \"%s\" is not a regular file!\n",
+		    filename),
+	    backtrace()
+    }));
+  }
+
   switch(query_num_arg())
   {
   case 1:
-- 
GitLab