Skip to content

Commit

Permalink
Merge branch 'braaannigan-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
shoyer committed Jan 20, 2018
2 parents 3bd704a + 47c3b62 commit e31cf43
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 0 deletions.
3 changes: 3 additions & 0 deletions doc/whats-new.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ Enhancements

Bug fixes
~~~~~~~~~
- Added warning in api.py of a netCDF4 bug that occurs when
the filepath has 88 characters (:issue:`1745`).
By `Liam Brannigan <https://github.com/braaannigan>` _.
- Fixed encoding of multi-dimensional coordinates in
:py:meth:`~Dataset.to_netcdf` (:issue:`1763`).
By `Mike Neish <https://github.com/neishm>`_.
Expand Down
13 changes: 13 additions & 0 deletions xarray/backends/netCDF4_.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from __future__ import print_function
import functools
import operator
import warnings
from distutils.version import LooseVersion

import numpy as np

Expand Down Expand Up @@ -244,6 +246,17 @@ 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
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.\n'
'in this case. The issue is known to occur with\n'
'version 1.2.4 of netCDF4 and can be addressed by\n'
'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
10 changes: 10 additions & 0 deletions xarray/tests/test_backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import tempfile
import unittest
import sys
import warnings

import numpy as np
import pandas as pd
Expand Down Expand Up @@ -1056,6 +1057,15 @@ 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 warnings.catch_warnings():
warnings.simplefilter("error")
with raises_regex(Warning, 'segmentation fault'):
# Need to construct 88 character filepath
xr.Dataset().to_netcdf('a' * (88 - len(os.getcwd()) - 1))


class NetCDF4DataStoreAutocloseTrue(NetCDF4DataTest):
autoclose = True
Expand Down

0 comments on commit e31cf43

Please sign in to comment.