From c36b20b7dc2e787f7285e459851df1a74368e8e3 Mon Sep 17 00:00:00 2001 From: Vasant Hegde Date: Wed, 20 Sep 2017 16:52:35 +0530 Subject: [PATCH] lsvpd: Add workaround for std::ios_base::failure' issue Recently on P9 we started seeing below error. #vpdupdate terminate called after throwing an instance of 'std::ios_base::failure' what(): basic_filebuf::underflow error reading the file Aborted (core dumped) It turns out that we needed c++ fix. Lets add workaround so that we don't crash. Signed-off-by: Vasant Hegde Reviewed-by: Ankit Kumar --- src/internal/sys_interface/icollector.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/internal/sys_interface/icollector.cpp b/src/internal/sys_interface/icollector.cpp index 0d48c93..d6407d9 100644 --- a/src/internal/sys_interface/icollector.cpp +++ b/src/internal/sys_interface/icollector.cpp @@ -104,6 +104,17 @@ namespace lsvpd */ string ICollector::getBinaryData( const string& path ) { + struct stat sbuf; + + /* + * Check file existence and size before calling ifstream + * + * Workaround for libstdc++ issue. + * https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=250545 + */ + if ((stat(path.c_str(), &sbuf) != 0) || (sbuf.st_size == 0)) + return ""; + ifstream fi(path.c_str(), ios::binary); string str; -- 2.13.5