diff --git a/src/wrapper/wrap_cl.hpp b/src/wrapper/wrap_cl.hpp
index ea1cea822cf3efaf2ff8ed73f5febb8db3fed7a0..4be614a0c427a75c34cb8b927476472874012eb3 100644
--- a/src/wrapper/wrap_cl.hpp
+++ b/src/wrapper/wrap_cl.hpp
@@ -1725,7 +1725,13 @@ namespace pyopencl
         PYOPENCL_CALL_GUARDED(clGetMemObjectInfo,
             (data(), CL_MEM_FLAGS, sizeof(my_flags), &my_flags, 0));
 
-        return get_sub_region(start, end, my_flags);
+        flags &= ^CL_MEM_COPY_HOST_PTR;
+
+        if (end <= start)
+          throw pyopencl::error("Buffer.__getitem__", CL_INVALID_VALUE,
+              "Buffer slice have end > start");
+
+        return get_sub_region(start, end-start, my_flags);
       }
 #endif
   };