Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add warning for netCDF4 bug #1835

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions xarray/backends/netCDF4_.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from __future__ import print_function
import functools
import operator
import warnings

import numpy as np

Expand Down Expand Up @@ -244,6 +245,16 @@ def __init__(self, netcdf4_dataset, mode='r', writer=None, opener=None,
def open(cls, filename, mode='r', format='NETCDF4', group=None,
writer=None, clobber=True, diskless=False, persist=False,
autoclose=False):
import netCDF4 as nc4
from distutils.version import LooseVersion
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can put this import at the top level. (We only import netCDF4 inside functions/methods to avoid the hard dependency, but disutils is part of Python's standard library.)

if (len(filename) == 88 and
LooseVersion(nc4.__version__) < "1.3.1"):
warnings.warn('\nA segmentation fault may occur when the\n'
'file path has exactly 88 characters as it does in this case.\n'
'The issue is known to occur with version 1.2.4 of netCDF4 and\n'
'can be addressed by upgrading netCDF4 to at least version 1.3.1.\n'
'More details can be found here:\n'
'https://github.com/pydata/xarray/issues/1745 \n')
if format is None:
format = 'NETCDF4'
opener = functools.partial(_open_netcdf4_group, filename, mode=mode,
Expand Down
6 changes: 6 additions & 0 deletions xarray/tests/test_backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -1056,6 +1056,12 @@ def test_unsorted_index_raises(self):
except IndexError as err:
self.assertIn('first by calling .load', str(err))

def test_88_character_filename_segmentation_fault(self):
# should be fixed in netcdf4 v1.3.1
with mock.patch('netCDF4.__version__', '1.2.4'):
with pytest.warns(Warning, match='segmentation fault'):
xr.Dataset().to_netcdf('a' * 88)


class NetCDF4DataStoreAutocloseTrue(NetCDF4DataTest):
autoclose = True
Expand Down