diff --git a/ChangeLog b/ChangeLog index 1e0371c7..7bc0d2d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18062,3 +18062,5 @@ * Fixed regression with rdairplay(1) loading previous log. 2018-11-25 Patrick Linstruth * Optimized RDAudioPort SQL queries. +2018-11-26 Patrick Linstruth + * Fixed bug where requested port could overrun HPI_MAX_NODES. diff --git a/rdhpi/rdhpisoundcard.cpp b/rdhpi/rdhpisoundcard.cpp index b493c6a4..d61bd833 100644 --- a/rdhpi/rdhpisoundcard.cpp +++ b/rdhpi/rdhpisoundcard.cpp @@ -189,36 +189,60 @@ bool RDHPISoundCard::setClockSource(int card,RDHPISoundCard::ClockSource src) bool RDHPISoundCard::haveTimescaling(int card) const { + if(card>=HPI_MAX_ADAPTERS) { + return false; + } + return timescale_support[card]; } bool RDHPISoundCard::haveInputVolume(int card,int stream,int port) const { + if(card>=HPI_MAX_ADAPTERS||stream>=HPI_MAX_STREAMS||port>=HPI_MAX_NODES) { + return false; + } + return input_stream_volume[card][stream][port]; } bool RDHPISoundCard::haveOutputVolume(int card,int stream,int port) const { + if(card>=HPI_MAX_ADAPTERS||stream>=HPI_MAX_STREAMS||port>=HPI_MAX_NODES) { + return false; + } + return output_stream_volume[card][stream][port]; } bool RDHPISoundCard::haveInputLevel(int card,int port) const { + if(card>=HPI_MAX_ADAPTERS||port>=HPI_MAX_NODES) { + return false; + } + return input_port_level[card][port]; } bool RDHPISoundCard::haveOutputLevel(int card,int port) const { + if(card>=HPI_MAX_ADAPTERS||port>=HPI_MAX_NODES) { + return false; + } + return output_port_level[card][port]; } bool RDHPISoundCard::haveInputStreamVOX(int card,int stream) const { + if(card>=HPI_MAX_ADAPTERS||stream>=HPI_MAX_STREAMS) { + return false; + } + return input_stream_vox[card][stream]; }