diff --git a/include/eigenpy/scipy-allocator.hpp b/include/eigenpy/scipy-allocator.hpp
index 848fd62f0b60b1fd39a42a46a53bb6f5b2591ca1..0f471b896d11df672552b75dcf96480139989353 100644
--- a/include/eigenpy/scipy-allocator.hpp
+++ b/include/eigenpy/scipy-allocator.hpp
@@ -85,6 +85,9 @@ struct scipy_allocator_impl_sparse_matrix {
       //      scipy_sparse_matrix_type(*bp::make_tuple(0,0),**args);
       scipy_sparse_matrix = scipy_sparse_matrix_type(
           Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>(0, 0));
+    } else if (mat.nonZeros() == 0) {
+      scipy_sparse_matrix =
+          scipy_sparse_matrix_type(bp::make_tuple(mat.rows(), mat.cols()));
     } else {
       scipy_sparse_matrix = scipy_sparse_matrix_type(bp::make_tuple(
           DataVector(data),
diff --git a/include/eigenpy/sparse/eigen-from-python.hpp b/include/eigenpy/sparse/eigen-from-python.hpp
index f5158a53f2e77cf08b6875e8568a9ee1958729ba..13c20f77972f556f18e2579b8ad1345e756d7e60 100644
--- a/include/eigenpy/sparse/eigen-from-python.hpp
+++ b/include/eigenpy/sparse/eigen-from-python.hpp
@@ -146,8 +146,15 @@ void eigen_sparse_matrix_from_py_construct(
     const Eigen::Index m = bp::extract<Eigen::Index>(shape[0]),
                        n = bp::extract<Eigen::Index>(shape[1]),
                        nnz = bp::extract<Eigen::Index>(obj.attr("nnz"));
-    MapMatOrRefType sparse_map(m, n, nnz, indptr.data(), indices.data(),
-                               data.data());
+
+    // Handle the specific case of the null matrix
+    Scalar *data_ptr = nullptr;
+    StorageIndex *indices_ptr = nullptr;
+    if (nnz > 0) {
+      data_ptr = data.data();
+      indices_ptr = indices.data();
+    }
+    MapMatOrRefType sparse_map(m, n, nnz, indptr.data(), indices_ptr, data_ptr);
 
     new (raw_ptr) MatOrRefType(sparse_map);
   }